2010-02-19 13 views
8

प्रदर्शित करें मुझे एहसास है कि यह एक आसान होने की संभावना है, लेकिन मेरा एसक्यूएल सबसे अच्छा है।पंक्तियों के समूह को कैसे गिनें और शीर्ष/नीचे 3

आइए कहें कि मेरे पास ऑर्डर की एक सूची वाली तालिका है, जिसमें item_id कॉलम में से एक है। मुझे आइटम के 3 कम से कम (या 3 सबसे लोकप्रिय) ऑर्डर प्रदर्शित करने की आवश्यकता है।

मुझे पता है कि मुझे item_id का उपयोग करके ऑर्डर को समूहबद्ध करने की आवश्यकता है और फिर उन्हें गिनें। फिर मुझे अवरोही (या आरोही) क्रम में नीचे (या शीर्ष) 3 प्रदर्शित करने की आवश्यकता है। मुझे पूरी तरह से यकीन नहीं है कि इस तरह की क्वेरी कैसे बनाएं।

+0

मेरे अंग्रेजी पर्याप्त नहीं है DESC जोड़ें। यह सिर्फ मैं हूँ? – Quassnoi

+0

सिर्फ आप ही नहीं। मुझे लगता है कि ओपी का मतलब कुछ और था: "मुझे तीन सबसे अधिक आदेशित वस्तुओं को प्रदर्शित करने की ज़रूरत है।" – bernie

+1

स्टैक ओवरव्लो में आपका स्वागत है। –

उत्तर

10

में Sql सर्वर:

SELECT TOP 3 item_id, COUNT(*) as itemcount 
FROM table 
GROUP BY item_id ORDER BY itemcount 

और वंश ऑर्डर करने के लिए मुझे "3 आइटम के सबसे लोकप्रिय आदेश" को समझने के लिए

3
select item_id, count(*) 
from table 
group by item_id; 

आपको पूरी सूची देगा।

नीचे 3:

select item_id 
from (
    select item_id, count(*) as cnt 
    from table 
    group by item_id 
    order by cnt 
) where rownum < 4; 

शीर्ष 3:

select item_id 
from (
    select item_id, count(*) as cnt 
    from table 
    group by item_id 
    order by cnt desc 
) where rownum < 4; 

नोट: इस sytnax ओरेकल के लिए है। यदि आपके पास SQL ​​सर्वर है तो आपके पास MySQL या TOP है यदि LIMIT का उपयोग करें।

ऑर्डर आपके परिणाम क्रमबद्ध करेगा। आरोही क्रम डिफ़ॉल्ट है, इसलिए यदि आप सबसे बड़ा प्राप्त करना चाहते हैं तो 'desc' का उपयोग करें। यह देववाणी है एक सीमा करने का था:

ग्रुप द्वारा (जब गिनती के साथ इस्तेमाल किया (*)) समान वस्तुओं

जहां ROWNUM < 4 के समूह में रखा जाएगा। यह क्वेरी के पहले 3 पंक्तियों को वापस चलाता है जो चलाया गया है। जहां क्लॉज ऑर्डर क्लॉज से पहले चलाए जाते हैं, यही कारण है कि आपको इसे नेस्टेड क्वेरी के रूप में करना है।

+0

कोई टिप्पणी के साथ downvote क्यों? –

+0

@quassnoi: हमने इसे एक ही समय में संपादित किया: मैंने आपके संपादन वापस लुढ़काए, फिर उन्हें मेरे साथ शामिल किया ताकि मैं जो पाठ जोड़ा वह वहां होगा। –

2

MySQL में:

SELECT item_id, COUNT(*) AS cnt 
FROM orders 
GROUP BY 
     item_id 
ORDER BY 
     cnt DESC 
LIMIT 3 
3

एसक्यूएल सर्वर के लिए:

select top 3 item_id, count(item_id) 
from  table 
group by item_id 
order by count(item_id) desc 

3 सबसे लोकप्रिय ITEM_ID के

का उपयोग कर आप दे देंगे:

order by count(item_id) 

आप दे देंगे 3 कम से कम पी opular ITEM_ID के

+0

इस उत्तर के लिए क्या डीबीएमएस है? –

+0

@ डेविड: 'एसक्यूएल सर्वर' – Quassnoi

संबंधित मुद्दे