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

MySQL में GROUP BY और MAX का उपयोग करके समान नाम वाले छात्रों की अधिकतम आयु प्राप्त करें

MySQL में GROUP BY और MAX() का उपयोग करके प्रति समूह अधिकतम मान खोजना

जब आपके पास डुप्लिकेट नाम (या अन्य समूहन कॉलम) हों और आप प्रत्येक समूह के लिए अधिकतम मान खोजना चाहते हैं, तो GROUP BY के साथ MAX() एग्रीगेट फ़ंक्शन का उपयोग करें।

टेबल बनाना

mysql> CREATE TABLE DemoTable1964 (
    -> StudentName VARCHAR(20),
    -> StudentAge INT
    -> );
Query OK, 0 rows affected (0.00 sec)

डुप्लिकेट नामों के साथ डेटा डालना

mysql> INSERT INTO DemoTable1964 VALUES ('Chris', 23);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1964 VALUES ('David', 34);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1964 VALUES ('Chris', 27);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1964 VALUES ('Sam', 31);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1964 VALUES ('David', 32);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO DemoTable1964 VALUES ('David', 37);
Query OK, 1 row affected (0.00 sec)

सभी रिकॉर्ड्स देखना

mysql> SELECT * FROM DemoTable1964;
+-------------+------------+
| StudentName | StudentAge |
+-------------+------------+
| Chris       |         23 |
| David       |         34 |
| Chris       |         27 |
| Sam         |         31 |
| David       |         32 |
| David       |         37 |
+-------------+------------+
6 rows in set (0.00 sec)

प्रति छात्र अधिकतम आयु प्राप्त करने का क्वेरी

mysql> SELECT StudentName, MAX(StudentAge) 
    -> FROM DemoTable1964 
    -> GROUP BY StudentName;

परिणाम

+-------------+-----------------+
| StudentName | max(StudentAge) |
+-------------+-----------------+
| Chris       |              27 |
| David       |              37 |
| Sam         |              31 |
+-------------+-----------------+
3 rows in set (0.00 sec)

व्याख्या

StudentNameउम्रअधिकतम
Chris23, 2727
David34, 32, 3737
Sam3131

अधिक जानकारी के साथ विस्तारित क्वेरी

SELECT 
    StudentName,
    COUNT(*) AS RecordCount,
    MIN(StudentAge) AS MinAge,
    MAX(StudentAge) AS MaxAge,
    AVG(StudentAge) AS AvgAge,
    SUM(StudentAge) AS TotalAge
FROM DemoTable1964
GROUP BY StudentName
ORDER BY MaxAge DESC;

संबंधित एग्रीगेट फ़ंक्शन

  • MIN(): न्यूनतम मान
  • MAX(): अधिकतम मान
  • AVG(): औसत मान
  • SUM(): योग
  • COUNT(): पंक्तियों की गिनती
  • GROUP_CONCAT(): मानों को स्ट्रिंग में संयोजित

अधिकतम मान वाली पूरी पंक्ति प्राप्त करना (सिर्फ मान नहीं)

-- विधि 1: JOIN के साथ
SELECT d1.* FROM DemoTable1964 d1
JOIN (
    SELECT StudentName, MAX(StudentAge) AS MaxAge
    FROM DemoTable1964
    GROUP BY StudentName
) d2 ON d1.StudentName = d2.StudentName AND d1.StudentAge = d2.MaxAge;

-- विधि 2: विंडो फ़ंक्शन (MySQL 8.0+)
SELECT StudentName, StudentAge FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY StudentName ORDER BY StudentAge DESC) AS rn
    FROM DemoTable1964
) t WHERE rn = 1;

सामान्य गलतियाँ

-- गलत: गैर-एग्रीगेट कॉलम SELECT में बिना GROUP BY के
SELECT StudentName, StudentAge, MAX(StudentAge) FROM DemoTable1964 GROUP BY StudentName;
-- MySQL ONLY_FULL_GROUP_BY मोड में त्रुटि देगा

-- सही: सभी गैर-एग्रीगेट कॉलम GROUP BY में होने चाहिए
SELECT StudentName, MAX(StudentAge) FROM DemoTable1964 GROUP BY StudentName;

केस संवेदनशीलता नोट

GROUP BY डिफ़ॉल्ट कॉलेशन के अनुसार केस-असंवेदनशील है। 'Chris' और 'CHRIS' एक साथ समूहित होंगे। केस-संवेदनशील समूहन के लिए:

GROUP BY BINARY StudentName
  1. - MySQL में उच्चतम मान वाले शीर्ष 3 रिकॉर्ड कैसे प्राप्त करें?

    MySQL में ORDER BY ... DESC और LIMIT का उपयोग करके उच्चतम मान वाले शीर्ष N रिकॉर्ड प्राप्त किए जा सकते हैं। सिंटैक्स SELECT * FROM table_name ORDER BY column_name DESC LIMIT N; उदाहरण छात्र स्कोर तालिका: mysql> CREATE TABLE DemoTable ( -> StudentName VARCHAR(20), StudentScore INT -&g

  1. - MySQL में छात्र के दो अंक कॉलम (Marks1, Marks2) से अधिकतम व्यक्तिगत अंक कैसे प्राप्त करें?

    MySQL में MAX() और GROUP BY का उपयोग करके प्रत्येक छात्र के लिए एकाधिक अंक कॉलम में से अधिकतम मान प्राप्त किया जा सकता है। उदाहरण तालिका बनाएं: (Carol@gmail.com, 32, 45), (David@gmail.com, 45, 32); डेटा +-----------------+--------+--------+ | StudentEmailId | Marks1 | Marks2 | +-----------------

  1. - MySQL में IN() क्लॉज़ के साथ एक क्वेरी में रिकॉर्ड कैसे डिलीट करें?

    MySQL में एक ही क्वेरी में एकाधिक विशिष्ट रिकॉर्ड डिलीट करने के लिए, DELETE स्टेटमेंट के साथ IN() ऑपरेटर का उपयोग करें। यह एकाधिक DELETE स्टेटमेंट चलाने से अधिक कुशल और पठनीय है। उदाहरण: विशिष्ट StudentId वाले रिकॉर्ड डिलीट करना डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1922 ( StudentI