Je suis en train de mettre à jour le total des revenus pour les bureaux situés dans des zones géographiques différentes. Les zones géographiques sont définies par des cercles et des polygones qui sont à la fois dans les formes.la forme de la colonne.
Lorsque j'exécute la requête ci-dessous, MySQL jette "R_INVALID_GROUP_FUNC_USE: utilisation incorrecte de la fonction de groupe"
J'ai essayé d'adapter cette réponse, mais je ne peux pas comprendre la logique de la condition de jointure et de données géospatiales -- ce n'est pas aussi simple que l'ajout d'une sous-requête avec une clause where. (Ou est-il?)
Pour le contexte, j'ai environ 350 zones géographiques et 150 000 les bureaux.
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);
Mise à JOUR:
Cela fonctionne, mais c'est lent et confus. Est-il plus rapide/plus 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;