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

MySQL GROUP BY के लिए PostgreSQL समकक्ष

बैक-टिक एक गैर-मानक 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(*) आम तौर पर अधिक उपयुक्त होता है (और थोड़ा तेज़ भी)।



  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 YEARWEEK को आज की तारीख में बदलें

  2. MySQL:रिकॉर्ड के बीच औसत अंतराल

  3. PHP/MySQL - SQL सिंटैक्स त्रुटि?

  4. लेखांकन आवेदन के साथ MySQL लेनदेन

  5. ऑटो वेतन वृद्धि आरंभिक संख्या बदलें?