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

mySQL क्वेरी - सबसे लोकप्रिय आइटम दिखाएं

मेरा प्रारंभिक सुझाव गलत था :

SELECT
  date, item, SUM(cnt)
FROM (
  SELECT
    date, item, count(item_id) AS cnt
  FROM test_popularity
  GROUP BY date, item_id
  ORDER BY cnt DESC
) t
GROUP BY date;

यह गलती से मानता है कि बाहरी एकत्रीकरण (तारीख के अनुसार) आंतरिक व्युत्पन्न तालिका की पहली पंक्ति का चयन करेगा जिसे सीएनटी द्वारा आदेश दिया गया था। यह व्यवहार, वास्तव में, अपरिभाषित है और सुसंगत होने की गारंटी नहीं है।

यहाँ उचित समाधान है:

SELECT
  t1.date, t1.item, 
  (SELECT COUNT(*) FROM test_popularity WHERE date = t1.date) as total
  # see note!
FROM test_popularity t1
JOIN (
  SELECT date, item, item_id, COUNT(item_id) as count
  FROM test_popularity
  GROUP BY date, item_id
) AS t2
ON t1.date = t2.date AND t1.item_id = t2.item_id
GROUP BY t1.date;

नोट:

मैंने (SELECT COUNT(*)) AS total . जोड़ा क्योंकि प्रश्न ने इसके लिए एक प्रश्न में पूछा था। हालाँकि, यह पैमाना नहीं होगा क्योंकि यह एक सहसंबद्ध उपश्रेणी है। इसका मतलब है कि प्रत्येक t1.date के लिए SELECT 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 सर्वर --secure-file-priv विकल्प के साथ चल रहा है, इसलिए यह मैक पर इस कथन को निष्पादित नहीं कर सकता है

  2. एक डेटाबेस में एक ऐरे और उसकी चाबियों को सहेजने का एक प्रभावी तरीका

  3. PDO को mysqli में कैसे बदलें?

  4. पकड़ने योग्य घातक त्रुटि:क्लास डेटटाइम का ऑब्जेक्ट स्ट्रिंग में परिवर्तित नहीं किया जा सका

  5. MYSQL:यदि कथन के साथ प्रक्रिया