Încerc să actualizeze veniturile totale pentru birouri situate în diferite zone geografice. Pe zone geografice sunt definite prin cercuri și poligoane care sunt atât în forme.forma de coloana.
Atunci când am rula interogarea de mai jos, MySQL aruncă "R_INVALID_GROUP_FUNC_USE: Invalid utilizarea funcțiilor de grup"
Am încercat să adaptăm acest răspuns, dar nu-mi pot da seama de logica cu condițional și date geospațiale ... nu e la fel de simplu ca adăugarea de o subinterogare cu o clauza where. (Sau este?)
Pentru context, am aproximativ 350 de zone geografice și 150.000 de birouri.
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);
UPDATE:
Aceasta funcționează, dar este lent și confuz. Există un mod mai rapid/mai concis?
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;