Próbuję zaktualizować ogólną ratunek dla biur, zlokalizowanych w różnych regionach geograficznych. Obszary geograficzne określone w kółko i wielokątami, które znajdują się w kolumnie shapes.shape.
Kiedy wykonuję zapytanie poniżej, MySQL podaje "R_INVALID_GROUP_FUNC_USE: Nieprawidłowe korzystanie z funkcji grupy".
Próbowałem dostosować tę odpowiedź, ale nie mogę zrozumieć logiki warunkowego połączenia i geoprzestrzennych danych-to nie jest tak proste, jak dodać podzapytanie z ofertą WHERE. (Czy to prawda?)
Dla kontekstu u mnie około 350 obszarów geograficznych i 150 000 biur.
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);
Odśwież:
To działa, ale powoli i mylące. Czy jest szybszy/bardziej przejrzysty sposób?
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;