Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में प्रत्येक ग्रुप से शीर्ष 2 पंक्तियाँ कैसे चुनें?


सबक्वेरी के साथ WHERE क्लॉज का उपयोग करें

प्रत्येक ग्रुप से शीर्ष N पंक्तियाँ प्राप्त करने के लिए, एक सहसंबद्ध सबक्वेरी का उपयोग करें जो प्रत्येक पंक्ति के लिए गिनती करती है कि उस ग्रुप में उससे बड़े या बराबर मान वाली कितनी पंक्तियाँ हैं।

टेबल बनाना और डेटा डालना

mysql> CREATE TABLE selectTop2FromEachGroup (
    Name VARCHAR(20),
    TotalScores INT
);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('John', 32);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('John', 33);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('John', 34);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('Carol', 35);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('Carol', 36);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('Carol', 37);

सभी रिकॉर्ड

+-------+-------------+
| Name  | TotalScores |
+-------+-------------+
| John  |          32 |
| John  |          33 |
| John  |          34 |
| Carol |          35 |
| Carol |          36 |
| Carol |          37 |
+-------+-------------+

क्वेरी: प्रत्येक ग्रुप से शीर्ष 2 (उच्चतम स्कोर)

mysql> SELECT * FROM selectTop2FromEachGroup tbl
WHERE (
    SELECT COUNT(*) 
    FROM selectTop2FromEachGroup tbl1 
    WHERE tbl1.Name = tbl.Name 
    AND tbl1.TotalScores >= tbl.TotalScores
) <= 2;

आउटपुट

+-------+-------------+
| Name  | TotalScores |
+-------+-------------+
| John  |          33 |
| John  |          34 |
| Carol |          36 |
| Carol |          37 |
+-------+-------------+

व्याख्या

  • सबक्वेरी प्रत्येक पंक्ति के लिए गिनती करती है कि उसी नाम वाले ग्रुप में उससे अधिक या बराबर स्कोर वाली कितनी पंक्तियाँ हैं।
  • <= 2 का अर्थ है शीर्ष 2 पंक्तियाँ (सबसे उच्च स्कोर वाली)।
  • निचले स्कोर वाली पंक्तियाँ (John का 32, Carol का 35) बाहर हो जाती हैं।

नोट

MySQL 8.0+ में, आप ROW_NUMBER() विंडो फंक्शन का उपयोग करके इसे अधिक कुशलता से कर सकते हैं।

  1. - MySQL का टाइमज़ोन कैसे सेट करें?

    SET time_zone से सेशन/ग्लोबल टाइमज़ोन सेट करें। करंट टाइम देखें SELECT NOW(); -- 2018-10-06 12:57:25 टाइमज़ोन सेट करें SET time_zone = +9:50; -- सेशन SET GLOBAL time_zone = +9:00; -- ग्लोबल (सुपर प्रिविलेज चाहिए) ऑफसेट फॉर्मेट: +HH:MM या -HH:MM। नाम वाले टाइमज़ोन (जैसे Asia/Kolkata) के लिए ट

  1. - MySQL में रिकर्सिव SELECT क्वेरी कैसे करें

    रिकर्सिव सेलेक्ट के लिए, आइए एक उदाहरण देखते हैं। सबसे पहले, हम एक टेबल बनाएंगे। टेबल बनाने के लिए CREATE कमांड का उपयोग किया जाता है। ); Query OK, 0 rows affected (0.61 sec) अब, हम टेबल tblSelectDemo में रिकॉर्ड्स डालेंगे। insert into tblSelectDemo values(5,Bob); Query OK, 1 row affected (0.18

  1. MySQL से अंतिम 10 रो कैसे चुनें? MySQL से अंतिम 10 रो कैसे चुनें?

    MySQL से अंतिम 10 रो चुनने के लिए, हम SELECT स्टेटमेंट और LIMIT कॉन्सेप्ट के साथ सबक्वेरी का उपयोग कर सकते हैं। निम्न एक उदाहरण है। टेबल बनाना। mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.75 sec) टेबल में रिकॉर