Estoy tratando de actualizar el total de ingresos para sus oficinas ubicadas en distintas zonas geográficas. Las geografías son definidos por los círculos y polígonos que están tanto en las formas.forma de columna.
Cuando ejecuto la consulta a continuación, MySQL lanza "R_INVALID_GROUP_FUNC_USE: uso no Válido de la función de grupo"
He intentado adaptar esta respuesta, pero no puedo entender la lógica con la condicional unirse y datos geoespaciales -- no es tan simple como añadir una subconsulta con una cláusula where. (O es?)
Para el contexto, tengo unos 350 geografías y 150.000 oficinas.
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);
ACTUALIZACIÓN:
Esto funciona, pero es lento y confuso. Hay una más rápida/más conciso?
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;