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

MySQL समूह द्वारा और अधिकतम गलत पंक्तियों को लौटाता है

मैं हर समय इस समस्या में भागता हूं। जब MySQL किसी भी गैर-एकत्रित कॉलम के लिए एक समग्र फ़ंक्शन चलाता है, तो यह उस समूह के लिए पहले डेटा को खींचता है, चाहे वह MAX पंक्ति से हो या नहीं। तो आपको क्या करना है डेटा को एक आंतरिक क्वेरी में ऑर्डर करना है जैसे कि अधिकतम उनके समूहों में पहले हैं। देखें कि क्या यह आपके लिए काम करता है:

SELECT t.post_id,
       t.profile_id,
       t.score,
       t.pubdate_utc
FROM (SELECT p.profile_id,
             p.post_id,
             p.pubdate_utc,
             (pp.comments + pp.likes + pp.favorites) score
      FROM posts p
      JOIN posts_points pp ON p.post_id = pp.post_id
      WHERE p.pubdate_utc >= DATE_ADD(DATE(NOW()), INTERVAL -17 DAY)
      ORDER BY score DESC
     ) t
GROUP BY DATE(t.pubdate_utc) DESC
;

ध्यान दें कि मैं यहां MAX फ़ंक्शन का उपयोग नहीं करता हूं। स्कोर अवरोही के आधार पर क्रमित करना और फिर बाहरी क्वेरी में तिथि के अनुसार समूह बनाना तिथि के अनुसार उच्चतम स्कोर प्राप्त करेगा। यह भी ध्यान दें कि मैंने WHERE क्लॉज को आंतरिक क्वेरी में रखा है। इस तरह के आंतरिक प्रश्न (कभी-कभी आवश्यक होते हैं) बहुत कुशल नहीं होते हैं, क्योंकि बाहरी क्वेरी को अनुकूलित करने के लिए उनके पास कोई अनुक्रमणिका नहीं होती है, इसलिए सुनिश्चित करें कि आपका आंतरिक परिणाम सेट जितना छोटा हो सकता है। अंत में, ग्रुप बाय DATE(t.pubdate_utc) पर ध्यान दें। अगर मैंने इसे केवल तारीख की जानकारी तक कम नहीं किया, तो 18 से अधिक परिणाम होंगे, क्योंकि समय भी गिना जाता है।

संपादित करें:INTERVAL -17 DAY में बदला गया 19 के बजाय 18 परिणाम देने के लिए।



  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 में इमोजी कोड कैसे निकालें?

  3. लारवेल / वाक्पटु:नेस्टेड

  4. ORDER BY और LIMIT . के बाद यूनियन

  5. MySQL उप-चयन प्रदर्शन प्रश्न?