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

MySQL तालिका में प्रत्येक व्यक्ति के लिए शीर्ष X रिकॉर्ड का चयन करता है

इस प्रकार की क्वेरी को "महानतम-एन-प्रति-समूह" अर्थ में फिर से लिखा जा सकता है, जहां आप चाहते हैं कि प्रति "समूह" के शीर्ष 10 अंक 'फू' के मान हों।

मेरा सुझाव है कि आप यह लिंक जो इस प्रश्न से अद्भुत तरीके से निपटता है, एक ऐसे तरीके से शुरू करता है जो आपकी क्वेरी को निष्पादित करने और धीरे-धीरे इसे अनुकूलित करने के लिए समझ में आता है।

set @num := 0, @foo := '';
select foo, score
from (
   select foo, score,
      @num := if(@foo = foo, @num + 1, 1) as row_number,
      @foo := foo as dummy
  from tablebar
  where foo IN ('abc','def')
  order by foo, score DESC     
) as x where x.row_number <= 10;

अगर आप इसे सभी में करना चाहते हैं foo . के स्तर (यानी एक GROUP BY foo करने की कल्पना करें ), आप where foo in ... . को छोड़ सकते हैं लाइन।

मूल रूप से आंतरिक क्वेरी (SELECT foo, score FROM tablebar WHERE foo IN ('abc','def') ORDER BY foo, score DESC ) पकड़ लेता है foo और score तालिका से, पहले foo . द्वारा आदेश देना और फिर अवरोही स्कोर करें।

@num := ... बस हर पंक्ति को बढ़ाता है, foo . के प्रत्येक नए मान के लिए 1 पर रीसेट करता है . यानी @num सिर्फ एक पंक्ति संख्या/रैंक है (मेरा क्या मतलब है यह देखने के लिए आंतरिक क्वेरी को स्वयं चलाने का प्रयास करें)।

बाहरी क्वेरी तब उन पंक्तियों का चयन करती है जहां रैंक/पंक्ति संख्या 10 से कम या उसके बराबर होती है।

नोट:

UNION . के साथ आपकी मूल क्वेरी डुप्लिकेट को हटा देता है, इसलिए यदि foo='abc' . के लिए शीर्ष 10 स्कोर सभी 100 हैं तो केवल एक पंक्ति लौटाई जाएगी (चूंकि (foo,score) जोड़ी को 10 बार दोहराया जाता है)। यह डुप्लिकेट लौटाएगा।




  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 concat ()?

  2. डेटाबेस में टैग संग्रहीत करना। टैग को एक बार या कई बार स्टोर करें?

  3. mysql डेटाबेस बनाने और माइग्रेट करने के लिए प्रारंभकर्ता कैसे बनाएं?

  4. XML फ़ीड से MySQL में रिकॉर्ड अपडेट करने का सबसे अच्छा तरीका

  5. mysqli में क्वेरी के परिणाम पर स्टोर और पुनरावृति