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

MySQL में सबक्वायरी फ़ील्ड के बिना मोड गणना?

इस समाधान को आजमाएं:

SELECT
    a.product_group,
    SUBSTRING_INDEX(GROUP_CONCAT(a.manufacturer ORDER BY a.occurrences DESC SEPARATOR ':::'), ':::', 1) AS manufacturer_mode
FROM
    (
        SELECT
            aa.product_group,
            aa.manufacturer,
            COUNT(*) AS occurrences
        FROM
            products aa
        GROUP BY
            aa.product_group,
            aa.manufacturer
    ) a
GROUP BY
    a.product_group

स्पष्टीकरण:

यह अभी भी सबक्वायरी के एक रूप का उपयोग करता है, लेकिन एक जो केवल एक बार निष्पादित होता है, जो एक पंक्ति-दर-पंक्ति आधार पर निष्पादित होता है जैसे कि आपके मूल उदाहरण में।

यह पहले product_group . को चुनकर काम करता है आईडी, निर्माता, और प्रत्येक विशेष समूह के लिए निर्माता कितनी बार दिखाई देता है इसकी गणना।

FROM निष्पादन के बाद उप-चयन कुछ इस तरह दिखाई देगा (बस यहां डेटा बना रहा है):

product_group   |   manufacturer   |    occurrences
---------------------------------------------------
1               |   XYZ            |    4
1               |   Test           |    2
1               |   Singleton      |    1
2               |   Eloran         |    2
2               |   XYZ            |    1

अब जब हमारे पास उप-चयन परिणाम है, तो हमें उस पंक्ति को चुनना होगा जिसमें occurences में अधिकतम है प्रत्येक उत्पाद समूह के लिए फ़ील्ड।

बाहरी क्वेरी में, हम उप-चयन को एक बार फिर product_group . द्वारा समूहित करते हैं फ़ील्ड, लेकिन इस बार, केवल product_group खेत। अब जब हम अपना GROUP BY . करते हैं यहाँ, हम MySQL में GROUP_CONCAT . नामक वास्तव में सम्मोहक फ़ंक्शन का उपयोग कर सकते हैं जिसका उपयोग हम निर्माताओं को एक साथ जोड़ने और किसी भी क्रम में करने के लिए कर सकते हैं।

...GROUP_CONCAT(a.manufacturer ORDER BY a.occurrences DESC SEPARATOR ':::'...

हम यहां जो कर रहे हैं वह उन निर्माताओं को एक साथ जोड़ रहा है जो प्रति product_group के अनुसार समूहीकृत हैं आईडी, ORDER BY a.occurrences DESC सुनिश्चित करता है कि सबसे अधिक दिखावे वाला निर्माता पहले दिखाई दे संबद्ध सूची में। अंत में हम प्रत्येक निर्माता को ::: . से अलग कर रहे हैं . इसका परिणाम product_group . के लिए है 1 ऐसा दिखेगा:

XYZ:::Test:::Singleton

XYZ सबसे पहले दिखाई देता है क्योंकि इसका occurance . में उच्चतम मान है खेत। हम केवल XYZ select चुनना चाहते हैं , इसलिए हम संयोजन को SUBSTRING_INDEX . के भीतर संलग्न करते हैं , जो हमें केवल ::: . के आधार पर सूची के पहले तत्व को चुनने की अनुमति देगा सीमांकक।

अंतिम परिणाम होगा:

product_group    |    manufacturer_mode
---------------------------------------
1                |    XYZ
2                |    Eloran



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कमांड लाइन से MySQL से कैसे कनेक्ट करें

  2. उन उपयोगकर्ताओं के लिए प्रश्न जो किसी विशिष्ट समूह में नहीं हैं? (EXCEPT का उपयोग करना चाहता था लेकिन ऐसा लगता है कि MySQL इसका समर्थन नहीं करता है)

  3. कैसे ठीक करें (2002, ec2 बिटनामी पर सॉकेट '/tmp/mysql.sock' (2)) के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता?

  4. dsn . का उपयोग करके R को MySQL से RODBC से कनेक्ट करें

  5. MySql कार्यक्षेत्र इंस्टॉलर को स्थापित करने के लिए Visual C++ 2015 पुनर्वितरण योग्य पैकेज की आवश्यकता है, लेकिन यह पहले से ही स्थापित है