एकाधिक कॉलम पर GROUP BY और MAX का उपयोग करके प्रत्येक ग्रुप के लिए अधिकतम मान वाली पंक्तियाँ प्राप्त करें।
एक टेबल बनाते हैं:
CREATE TABLE GroupByMaxDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
CategoryId INT,
Value1 INT,
Value2 INT
);
रिकॉर्ड डालें:
INSERT INTO GroupByMaxDemo (CategoryId, Value1, Value2) VALUES (10, 100, 50); INSERT INTO GroupByMaxDemo (CategoryId, Value1, Value2) VALUES (10, 100, 70); INSERT INTO GroupByMaxDemo (CategoryId, Value1, Value2) VALUES (10, 50, 100); INSERT INTO GroupByMaxDemo (CategoryId, Value1, Value2) VALUES (20, 180, 150);
सभी रिकॉर्ड देखें:
SELECT * FROM GroupByMaxDemo;
आउटपुट
+----+------------+--------+--------+ | Id | CategoryId | Value1 | Value2 | +----+------------+--------+--------+ | 1 | 10 | 100 | 50 | | 2 | 10 | 100 | 70 | | 3 | 10 | 50 | 100 | | 4 | 20 | 180 | 150 | +----+------------+--------+--------+
प्रत्येक CategoryId के लिए अधिकतम Value1 वाली पंक्ति का अधिकतम Value2 प्राप्त करें:
SELECT t2.CategoryId, t2.Value1, MAX(t2.Value2)
FROM (
SELECT CategoryId, MAX(Value1) AS Value1
FROM GroupByMaxDemo
GROUP BY CategoryId
) t1
INNER JOIN GroupByMaxDemo t2
ON t2.CategoryId = t1.CategoryId AND t2.Value1 = t1.Value1
GROUP BY t2.CategoryId, t2.Value1;
आउटपुट
+------------+--------+------------------+ | CategoryId | Value1 | MAX(t2.Value2) | +------------+--------+------------------+ | 10 | 100 | 70 | | 20 | 180 | 150 | +------------+--------+------------------+
MySQL 8.0+ में सरल तरीका: ROW_NUMBER() विंडो फंक्शन का उपयोग करें।