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

MySQL समूह द्वारा सबसे अधिक बार चुनें

SELECT t1.*
FROM (SELECT tag, category, COUNT(*) AS count
      FROM tags INNER JOIN stuff USING (id)
      GROUP BY tag, category) t1
LEFT OUTER JOIN 
     (SELECT tag, category, COUNT(*) AS count
      FROM tags INNER JOIN stuff USING (id)
      GROUP BY tag, category) t2
  ON (t1.tag = t2.tag AND (t1.count < t2.count 
      OR t1.count = t2.count AND t1.category < t2.category))
WHERE t2.tag IS NULL
ORDER BY t1.count DESC;

मैं मानता हूं कि यह एक एकल SQL क्वेरी के लिए बहुत अधिक है। GROUP BY . का कोई भी उपयोग एक सबक्वेरी के अंदर मुझे विंस बनाता है। आप इसे दिखें बना सकते हैं दृश्यों का उपयोग करके सरल:

CREATE VIEW count_per_category AS
    SELECT tag, category, COUNT(*) AS count
    FROM tags INNER JOIN stuff USING (id)
    GROUP BY tag, category;

SELECT t1.*
FROM count_per_category t1
LEFT OUTER JOIN count_per_category t2
  ON (t1.tag = t2.tag AND (t1.count < t2.count 
      OR t1.count = t2.count AND t1.category < t2.category))
WHERE t2.tag IS NULL
ORDER BY t1.count DESC;

लेकिन यह मूल रूप से पर्दे के पीछे वही काम कर रहा है।

आप टिप्पणी करते हैं कि आप एप्लिकेशन कोड में एक समान ऑपरेशन आसानी से कर सकते हैं। तो आप ऐसा क्यों नहीं करते? प्रति श्रेणी गणना प्राप्त करने के लिए सरल क्वेरी करें:

SELECT tag, category, COUNT(*) AS count
FROM tags INNER JOIN stuff USING (id)
GROUP BY tag, category;

और आवेदन कोड में परिणाम के माध्यम से छाँटें।



  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. PHP:mysql_connect () कमांड लाइन के माध्यम से काम नहीं करेगा

  3. दो पंक्तियों के बीच समय अंतर की गणना करें

  4. मैं दो MySQL तालिकाओं को कैसे मर्ज कर सकता हूं?

  5. mysqldump का उपयोग किए बिना डेटाबेस को कॉपी/डुप्लिकेट करें