Я пытаюсь обновить общую выручку для офисов, расположенных в разных географических регионах. Географические области определяются кругами и многоугольниками, которые находятся в столбце shapes.shape.
Когда я выполняю запрос ниже, MySQL выдает "R_INVALID_GROUP_FUNC_USE: Недопустимое использование функции группы".
Я попытался адаптировать этот ответ, но я не могу понять логику условного соединения и геопространственных данных-это не так просто, как добавить подзапрос с предложением WHERE. (Или это так?)
Для контекста у меня около 350 географических районов и 150 000 офисов.
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
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;