Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एसक्यूएल ग्रुप बाय:निरंतरता में अंतराल?

"एसक्यूएल के मानक कार्यों" में ऐसी कोई कार्यक्षमता नहीं है, लेकिन कुछ तरकीबों का उपयोग करके वांछित परिणाम प्राप्त करना संभव है।

नीचे दी गई उपश्रेणी के साथ हम एक वर्चुअल फ़ील्ड बनाते हैं जिसका उपयोग आप GROUP BY के लिए कर सकते हैं बाहरी क्वेरी में। oID के अनुक्रम में अंतराल होने पर इस वर्चुअल फ़ील्ड का मान हर बार बढ़ाया जाता है . इस तरह हम उनमें से प्रत्येक "डेटा द्वीप" के लिए एक पहचानकर्ता बनाते हैं:

SELECT  SUM(Area), COUNT(*) AS Count_Rows
FROM    (
        /* @group_enumerator is incremented each time there is a gap in oIDs continuity */
        SELECT  @group_enumerator := @group_enumerator + (@prev_oID != oID - 1) AS group_enumerator,
                @prev_oID := oID AS prev_oID,
                sample_table.*
        FROM    (
                SELECT  @group_enumerator := 0,
                        @prev_oID := -1
                ) vars,
                sample_table
        /* correct order is very important */
        ORDER BY
                oID
        ) q
GROUP BY
        group_enumerator

टेस्ट टेबल और डेटा जेनरेशन:

CREATE TABLE sample_table (oID INT auto_increment, Area INT, PRIMARY KEY(oID));
INSERT INTO sample_table (oID, Area) VALUES (1,5), (2,2), (3,3), (5,3), (6,4), (7,5);

मुझे इस ट्रिक को इस ट्रिक को इंगित करने के लिए धन्यवाद देना चाहिए। मेरा संबंधित प्रश्न ;-)

अद्यतन:उदाहरण क्वेरी में परीक्षण तालिका और डेटा और निश्चित डुप्लिकेट कॉलम नाम जोड़ा गया।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कुकी में पीएचपी भंडारण पासवर्ड

  2. ubuntu ARMHF पर sys_exec के बिना mySQL ट्रिगर के साथ बाहरी स्क्रिप्ट को कॉल करें

  3. MySQL में नया उपयोगकर्ता बनाएं और इसे एक डेटाबेस तक पूर्ण पहुंच प्रदान करें

  4. MySQL संग्रहीत प्रक्रिया, एकाधिक कर्सर और क्वेरी परिणामों को संभालना

  5. कोहाना में प्रक्रिया कैसे कॉल करें 3.1