어떻게 사용할 수 있습니 그룹이 함수 공간에 가입 업데이트 테이블에서 MySQL?

0

질문

내가 노력하고 업데이트에 대한 총 수익 사무실에 위치한 다른 지역. 지역에 의해 정의된 원고는 다각형 모두에서 모양입니다.모양의 열입니다.

때 나는 쿼리를 실행하여 아래,MySQL 발생"R_INVALID_GROUP_FUNC_USE:잘못 사용한 그룹"

려고 적응 대답하지만,내가 알아낼 수 없는 논리와 조건부에 가입하고 데이터-그것은 간단하지 않습니다 추가로 하위와는 절이 있습니다. (또는 그것은?)

에 대한 컨텍스트가 약 350 지리와 150,000 소가 있습니다.

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

업데이트:

이 작품은,그러나 그것은 느리고 복잡하다. 이 있는 빠른/더 간단한 방법은?

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

최고의 응답

0

나는 생각한 속도로에 의해 도움이 될 수 있습니다 두 개로 분할 UPDATEs:

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

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

는 경우 다음을 참조하십시오 결과 sql 을 단순화할 수 있습니다.

추가 조사를 쿼리하십시오 격리하여 하위 b 면 시간의 대량에서 일하는 SELECT (반대하고 있다 UPDATE).

제공해 주십시오 SHOW CREATE TABLE 각각의 테이블과 EXPLAIN 모두 UPDATE(s) 고 절연 SELECT(s). 숫자의 단서에서 올 수도 있습니다.

2021-11-17 20:30:29

다른 언어로

이 페이지는 다른 언어로되어 있습니다

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