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

समूहीकृत परिणामों के प्रत्येक समूह के लिए शीर्ष n रिकॉर्ड प्राप्त करें

ऐसा करने का एक तरीका यहां दिया गया है, UNION ALL . का उपयोग करके (देखें SQL Fiddle with Demo ) यह दो समूहों के साथ काम करता है, यदि आपके पास दो से अधिक समूह हैं, तो आपको group निर्दिष्ट करना होगा प्रत्येक group . के लिए नंबर और क्वेरी जोड़ें :

(
  select *
  from mytable 
  where `group` = 1
  order by age desc
  LIMIT 2
)
UNION ALL
(
  select *
  from mytable 
  where `group` = 2
  order by age desc
  LIMIT 2
)

ऐसा करने के कई तरीके हैं, अपनी स्थिति के लिए सर्वोत्तम मार्ग निर्धारित करने के लिए यह लेख देखें:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

संपादित करें:

यह आपके लिए भी काम कर सकता है, यह प्रत्येक रिकॉर्ड के लिए एक पंक्ति संख्या उत्पन्न करता है। ऊपर दिए गए लिंक से एक उदाहरण का उपयोग करने से केवल वे रिकॉर्ड वापस आएंगे जिनकी पंक्ति संख्या 2 से कम या उसके बराबर है:

select person, `group`, age
from 
(
   select person, `group`, age,
      (@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number 
  from test t
  CROSS JOIN (select @num:=0, @group:=null) c
  order by `Group`, Age desc, person
) as x 
where x.row_number <= 2;

देखें डेमो



  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. JSON_QUOTE () - MySQL में JSON मानों के रूप में उपयोग किए जाने वाले स्ट्रिंग्स में वर्णों से कैसे बचें

  3. PHP चेतावनी:mysqli_connect ():(HY000/2002):कनेक्शन अस्वीकृत

  4. मैं MySQL में पिवट टेबल आउटपुट कैसे वापस कर सकता हूं?

  5. Linux/Mac से Amazon EC2 पर MySQL से कैसे कनेक्ट करें?