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

MySQL में GROUP BY में MIN/MAX सबक्वेरी से समूह प्रतिनिधि पंक्ति चुनें

MySQL में GROUP BY के साथ प्रत्येक समूह से एक विशिष्ट पंक्ति (जैसे न्यूनतम ID वाली) चुनने के लिए सबक्वेरी में MIN() या MAX() का उपयोग करें।

उदाहरण: प्रत्येक अंक समूह से न्यूनतम StudentId वाली पंक्ति

1. टेबल बनाएं

mysql> CREATE TABLE DemoTable1572 (
    -> StudentId INT,
    -> StudentMarks INT,
    -> StudentName VARCHAR(20)
    -> );

2. डेटा डालें

mysql> INSERT INTO DemoTable1572 VALUES(1, 79, 'Sam');
mysql> INSERT INTO DemoTable1572 VALUES(2, 89, 'Chris');
mysql> INSERT INTO DemoTable1572 VALUES(3, 98, 'David');
mysql> INSERT INTO DemoTable1572 VALUES(4, 79, 'Bob');  -- समान अंक 79

3. सभी रिकॉर्ड

mysql> SELECT * FROM DemoTable1572;
+-----------+--------------+-------------+
| StudentId | StudentMarks | StudentName |
+-----------+--------------+-------------+
| 1         | 79           | Sam         |
| 2         | 89           | Chris       |
| 3         | 98           | David       |
| 4         | 79           | Bob         |
+-----------+--------------+-------------+

4. प्रत्येक अंक समूह से न्यूनतम StudentId वाली पंक्ति

mysql> SELECT * FROM DemoTable1572
    -> WHERE StudentId IN (
    ->     SELECT MIN(StudentId) FROM DemoTable1572 GROUP BY StudentMarks
    -> );

5. परिणाम

+-----------+--------------+-------------+
| StudentId | StudentMarks | StudentName |
+-----------+--------------+-------------+
| 1         | 79           | Sam         |
| 2         | 89           | Chris       |
| 3         | 98           | David       |
+-----------+--------------+-------------+

कैसे काम करता है

  1. सबक्वेरी: GROUP BY StudentMarks से प्रत्येक अंक के लिए न्यूनतम StudentId ढूंढता है
  2. बाहरी क्वेरी: उन ID वाली पूर्ण पंक्तियां चुनता है

अन्य विकल्प

JOIN के साथ

SELECT d1.* FROM DemoTable1572 d1
JOIN (
    SELECT StudentMarks, MIN(StudentId) AS min_id
    FROM DemoTable1572
    GROUP BY StudentMarks
) d2 ON d1.StudentId = d2.min_id;

MySQL 8.0+: ROW_NUMBER()

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY StudentMarks ORDER BY StudentId) AS rn
    FROM DemoTable1572
) t WHERE rn = 1;

किसी भी पंक्ति के लिए (MySQL विशिष्ट)

SELECT * FROM DemoTable1572 GROUP BY StudentMarks;
-- चेतावनी: ONLY_FULL_GROUP_BY मोड में त्रुटि देगा

सिफारिश

MySQL 8.0+ में ROW_NUMBER() उपयोग करें - अधिक पठनीय, लचीला और मानक-अनुरूप।

  1. - MySQL में पंक्तियाँ कैसे छोड़ें (स्किप करें)?

    MySQL में LIMIT OFFSET से पंक्तियाँ छोड़ना परिणाम सेट से कुछ प्रारंभिक पंक्तियाँ छोड़ने के लिए LIMIT ... OFFSET का उपयोग करें। टेबल बनाना और डेटा डालना mysql> CREATE TABLE DemoTable860 ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(100) ); Query OK, 0 rows affected (0.73 sec)

  1. - MySQL में ORDER BY FIELD को GROUP BY के साथ एकल क्वेरी में कैसे उपयोग करें

    इसके लिए, आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable ( Message text ); Query OK, 0 rows affected (1.15 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(Good); Query OK, 1 row affected (0.43 sec) mysql> insert into Demo

  1. - MySQL में ORDER BY CASE और IN() का उपयोग करके ग्रुप्ड फील्ड्स को कैसे ऑर्डर करें

    CASE WHEN ... IN() के साथ कस्टम ऑर्डरिंग ग्रुप्ड फील्ड्स को कस्टम ऑर्डर में सॉर्ट करने के लिए ORDER BY CASE के साथ IN() का उपयोग करें। CASE विभिन्न शर्तों का मूल्यांकन करता है जबकि ORDER BY मानों को आरोही/अवरोही क्रम में सॉर्ट करता है। आइए पहले एक टेबल बनाते हैं: mysql> CREATE TABLE DemoTable (