Jak mohu používat skupinové funkce na prostorových PŘIPOJIT k aktualizaci tabulky v MySQL?

0

Otázka

Snažím se aktualizovat celkové příjmy pro kanceláře nacházející se v různých zeměpisných oblastech. Regionech, jsou definovány tím, kruhy a polygony, které jsou oba tvary.tvar sloupce.

Při spuštění dotazu níže, MySQL hody "R_INVALID_GROUP_FUNC_USE: Neplatné použití funkce group"

Pokusil jsem se přizpůsobit tuto odpověď, ale nemůžu přijít na tu logiku s podmíněným připojit a geoprostorových dat-to není tak jednoduché, jak přidání poddotaz s klauzuli where. (Nebo je to?)

Pro kontextu, mám asi 350 geografických a 150.000 kanceláře.

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

AKTUALIZACE:

To funguje, ale je pomalý a matoucí. Je tam rychlejší/více výstižným způsobem?

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

Nejlepší odpověď

0

Myslím si, že rychlost může být pomáhal tím, že rozdělí do dvou UPDATEs:

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

a

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

A pak uvidíme, jestli výsledný SQLs může být zjednodušeno.

Dále vyšetřovat dotaz, prosím, izolovat poddotaz b a uvidíme, jestli se většinu času je v tom, že SELECT (na rozdíl od času dělat UPDATE).

Uveďte, prosím, SHOW CREATE TABLE pro každou tabulku a EXPLAIN pro oba UPDATE(s) a izolované SELECT(s). Číslo stopy, může pocházet z těchto.

2021-11-17 20:30:29

V jiných jazycích

Tato stránka je v jiných jazycích

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