Estou tentando atualizar a receita total para escritórios, localizados em diferentes áreas geográficas. As regiões são definidas por círculos e polígonos, que são tanto nas formas.forma de coluna.
Quando eu executo a consulta abaixo, MySQL lança "R_INVALID_GROUP_FUNC_USE: uso Inválido do grupo de função"
Eu tentei adaptar esta resposta, mas eu não consigo descobrir a lógica com a condicional de associação e de dados geoespaciais-não é tão simples como a adição de uma subconsulta com uma cláusula WHERE. (Ou é?)
Para o contexto, tenho cerca de 350 geografias e 150.000 escritórios.
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);
ATUALIZAÇÃO:
Isso funciona, mas é lento e confuso. Há mais rápido/mais concisa?
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;