कैसे मैं उपयोग कर सकते हैं समूह के कार्यों पर एक स्थानिक शामिल करने के लिए अद्यतन एक तालिका में 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 ...

और फिर देखें यदि जिसके परिणामस्वरूप SQLs सरल किया जा सकता.

जांच आगे प्रश्न है, कृपया अलग सबक्वेरी 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ý
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में