GROUP BY और MAX() से कंडीशनल ग्रुपिंग
डुप्लीकेट नाम वाले रिकॉर्ड्स में से प्रत्येक नाम की अधिकतम (मैक्सिमम) वैल्यू प्राप्त करने के लिए GROUP BY के साथ MAX() एग्रीगेट फंक्शन का उपयोग करें।
टेबल बनाना और डेटा इन्सर्ट करना
CREATE TABLE DemoTable (
StudentName VARCHAR(40),
StudentMarks INT
);
INSERT INTO DemoTable VALUES('John', 78);
INSERT INTO DemoTable VALUES('Chris', 48);
INSERT INTO DemoTable VALUES('John', 67);
INSERT INTO DemoTable VALUES('Chris', 89);
मौजूदा डेटा (डुप्लीकेट नाम)
+-------------+--------------+ | StudentName | StudentMarks | +-------------+--------------+ | John | 78 | | Chris | 48 | | John | 67 | | Chris | 89 | +-------------+--------------+
क्वेरी: प्रत्येक स्टूडेंट के मैक्सिमम मार्क्स
SELECT StudentName, MAX(StudentMarks) AS StudentMarks FROM DemoTable GROUP BY StudentName;
आउटपुट
+-------------+--------------+ | StudentName | StudentMarks | +-------------+--------------+ | John | 78 | | Chris | 89 | +-------------+--------------+
कैसे काम करता है
GROUP BY StudentName- एक ही नाम के रो को एक ग्रुप में जोड़ता हैMAX(StudentMarks)- प्रत्येक ग्रुप में सबसे बड़ा मान चुनता है- परिणाम: प्रत्येक यूनिक नाम के लिए एक रो, उसके मैक्सिमम मार्क्स के साथ
अन्य एग्रीगेट फंक्शन्स के साथ
SELECT
StudentName,
MAX(StudentMarks) AS HighestMarks,
MIN(StudentMarks) AS LowestMarks,
AVG(StudentMarks) AS AverageMarks,
COUNT(*) AS Attempts
FROM DemoTable
GROUP BY StudentName;
+-------------+--------------+-------------+--------------+----------+ | StudentName | HighestMarks | LowestMarks | AverageMarks | Attempts | +-------------+--------------+-------------+--------------+----------+ | John | 78 | 67 | 72.5 | 2 | | Chris | 89 | 48 | 68.5 | 2 | +-------------+--------------+-------------+--------------+----------+
कंडीशनल एग्रीगेशन (CASE के साथ)
SELECT StudentName,
MAX(CASE WHEN Subject = 'Math' THEN Marks END) AS MathMax,
MAX(CASE WHEN Subject = 'Science' THEN Marks END) AS ScienceMax
FROM StudentMarks
GROUP BY StudentName;
नोट
MySQL 8.0+ में विंडो फंक्शन ROW_NUMBER() से अधिक जटिल कंडीशनल लॉजिक लागू कर सकते हैं।