बैक-टिक एक गैर-मानक MySQL चीज़ है। पहचानकर्ताओं को उद्धृत करने के लिए कैननिकल डबल कोट्स का उपयोग करें (संभवतः MySQL में भी)। यानी, यदि आपकी तालिका का नाम वास्तव में "MY_TABLE"
. है (सभी ऊपरी मामले)। यदि आपने (अधिक बुद्धिमानी से) इसका नाम my_table
. रखा है (सभी लोअर केस), फिर आप डबल कोट्स को हटा सकते हैं या लोअर केस का उपयोग कर सकते हैं।
साथ ही, मैं ct
. का उपयोग करता हूं count
. के बजाय उपनाम के रूप में, क्योंकि पहचानकर्ता के रूप में फ़ंक्शन नामों का उपयोग करना बुरा व्यवहार है।
साधारण मामला
यह PostgreSQL के साथ काम करेगा 9.1 :
SELECT *, count(id) ct
FROM my_table
GROUP BY primary_key_column(s)
ORDER BY ct DESC;
इसके लिए GROUP BY
. में प्राथमिक कुंजी कॉलम की आवश्यकता होती है खंड। परिणाम समान . हैं एक MySQL क्वेरी के लिए, लेकिन ct
हमेशा 1 होगा (या 0 अगर id IS NULL
) - डुप्लीकेट ढूंढना बेकार है।
प्राथमिक कुंजी कॉलम के अलावा अन्य द्वारा समूहित करें
यदि आप अन्य कॉलम के आधार पर समूह बनाना चाहते हैं, तो चीजें और अधिक जटिल हो जाती हैं। यह क्वेरी आपकी MySQL क्वेरी के व्यवहार की नकल करती है - और आप कर सकते हैं *
का उपयोग करें ।
SELECT DISTINCT ON (1, some_column)
count(*) OVER (PARTITION BY some_column) AS ct
,*
FROM my_table
ORDER BY 1 DESC, some_column, id, col1;
यह काम करता है क्योंकि DISTINCT ON
(PostgreSQL विशिष्ट), जैसे DISTINCT
(एसक्यूएल-मानक), बाद लागू होते हैं विंडो फ़ंक्शन count(*) OVER (...)
. विंडो फ़ंक्शन
(OVER
. के साथ क्लॉज) के लिए PostgreSQL की आवश्यकता है 8.4 या बाद में और MySQL में उपलब्ध नहीं हैं।
प्राथमिक या अद्वितीय बाधाओं की परवाह किए बिना किसी भी तालिका के साथ काम करता है।
1
DISTINCT ON
. में और ORDER BY
SELECT
. में आइटम की क्रमिक संख्या को संदर्भित करने के लिए सिर्फ शॉर्टहैंड है सूची।
SQL Fiddle दोनों को साथ-साथ प्रदर्शित करने के लिए।
इस निकट से संबंधित उत्तर में अधिक विवरण:
count(*)
बनाम count(id)
यदि आप डुप्लीकेट ढूंढ रहे हैं, तो आपके लिए count(*)
. बेहतर है count(id)
. के मुकाबले . यदि id
. है तो एक सूक्ष्म अंतर है NULL
हो सकता है , क्योंकि NULL
मानों की गणना नहीं की जाती है - जबकि count(*)
सभी पंक्तियों की गणना करता है। अगर id
परिभाषित किया गया है NOT NULL
, परिणाम समान हैं, लेकिन count(*)
आम तौर पर अधिक उपयुक्त होता है (और थोड़ा तेज़ भी)।