Sto cercando di aggiornare il fatturato totale per uffici in diverse aree geografiche. Le aree geografiche sono definiti da cerchi e poligoni che sono sia nelle forme.forma di colonna.
Quando eseguo la query riportata di seguito, MySQL getta "R_INVALID_GROUP_FUNC_USE: utilizzo non Valido di funzione di gruppo"
Ho cercato di adattare questa risposta, ma io non riesco a capire la logica con la condizionale unirsi e dati geospaziali -- non è semplice come l'aggiunta di una sottoquery con una clausola WHERE. (O è?)
Per il contesto, ho circa 350 aree geografiche e 150.000 uffici.
UPDATE
shapes s
LEFT JOIN offices ON (
CASE
WHEN s.type = 'circle' THEN ST_Distance_Sphere(o.coords, s.shape) < s.radius
ELSE ST_CONTAINS(s.shape, o.coords)
END
)
SET
s.totalRevenue = SUM(o.revenue);
AGGIORNAMENTO:
Questo funziona, ma è lento e confuso. C'è un più veloce/più conciso?
UPDATE
shapes s
LEFT JOIN (
SELECT
t.shape_id,
SUM(g.revenue) revenue
FROM
shapes t
LEFT JOIN offices o ON (
CASE
WHEN t.type = 'circle' THEN ST_Distance_Sphere(o.coords, t.shape) < t.radius
ELSE ST_CONTAINS(t.shape, o.coords)
END
)
GROUP BY
t.shape_id
) b ON s.shape_id = b.shape_id
SET
s.totalRevenue = b.revenue;