Ako môžem použiť skupinu funkcií na priestorové PRIPOJIŤ sa na aktualizáciu tabuľky v MySQL?

0

Otázka

Snažím sa aktualizovať celkové príjmy na kancelárie sa nachádza v rôznych oblastiach. Na geografie sú definované v kruhu a mnohouholníkov, ktoré sú oba v tvarov.tvar stĺpci.

Keď som spustite dotaz nižšie, MySQL hody "R_INVALID_GROUP_FUNC_USE: Neplatný používanie skupinovej funkcie"

Snažil som sa prispôsobiť túto odpoveď, ale nemôžem prísť na to, logika s podmienené pripojiť a geopriestorové dáta -- to nie je tak jednoduché, ako pridanie poddotaz s AK klauzula. (Alebo je?)

Pre kontexte, som asi 350 geografie a 150,000 kancelárie.

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);

AKTUALIZÁCIA:

To funguje, ale je to pomalé a mätúce. Je tam rýchlejší/viac výstižným spôsobom?

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;
case left-join mysql spatial-query
2021-11-17 03:21:30
1

Najlepšiu odpoveď

0

Myslím si, že rýchlosť môže byť pomohol rozdelením do dvoch UPDATEs:

... WHERE t.type = 'circle' 
      AND ST_Distance_Sphere ...

a

... WHERE t.type != 'circle' 
      AND ST_CONCAINS ...

A potom uvidíme, či výsledný SQLs môže byť zjednodušené.

Podrobnejšie skúmať otázku, prosím, izolovať poddotaz b a pozri, ak väčšinu času je v tom, že SELECT (ako protiklad k čase robí UPDATE).

Uveďte, prosím, SHOW CREATE TABLE pre každú tabuľku a EXPLAIN pre oboch UPDATE(s) a izolovaný SELECT(s). Číslo stopy by mohlo prísť z týchto.

2021-11-17 20:30:29

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................