इस समाधान को आजमाएं:
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