MySQL में अधिकतम मान वाली पंक्ति ढूंढना
एक कॉलम में अधिकतम मान वाली पंक्ति ढूंढने के लिए, एक सबक्वेरी के साथ MAX() एग्रीगेट फ़ंक्शन का उपयोग करें जो फ़िल्टर मान प्रदान करता है।
उदाहरण: शीर्ष खिलाड़ी स्कोर ढूंढना
mysql> CREATE TABLE DemoTable1449 (
-> PlayerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> PlayerScore INT
-> );
Query OK, 0 rows affected (0.69 sec)
mysql> INSERT INTO DemoTable1449 (PlayerScore) VALUES
-> (1040), (1450), (1890), (1650);
Query OK, 4 rows affected (0.12 sec)
mysql> SELECT * FROM DemoTable1449;
+----------+-------------+
| PlayerId | PlayerScore |
+----------+-------------+
| 1 | 1040 |
| 2 | 1450 |
| 3 | 1890 |
| 4 | 1650 |
+----------+-------------+
4 rows in set (0.00 sec)
सबक्वेरी के साथ अधिकतम मान क्वेरी
mysql> SELECT PlayerId, PlayerScore FROM DemoTable1449
-> WHERE PlayerScore = (SELECT MAX(PlayerScore) FROM DemoTable1449);
परिणाम
+----------+-------------+ | PlayerId | PlayerScore | +----------+-------------+ | 3 | 1890 | +----------+-------------+ 1 row in set (0.00 sec)
वैकल्पिक दृष्टिकोण
| विधि | क्वेरी | नोट्स |
|---|---|---|
| सबक्वेरी (ऊपर) | WHERE col = (SELECT MAX(col) FROM t) | मानक, पठनीय |
| ORDER BY + LIMIT | SELECT * FROM t ORDER BY col DESC LIMIT 1 | सरल, इंडेक्स का उपयोग करता है |
| JOIN | SELECT t.* FROM t JOIN (SELECT MAX(col) m FROM t) x ON t.col = x.m | एकाधिक अधिकतम पंक्तियों के लिए अच्छा |
| विंडो फ़ंक्शन (8.0+) | SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY col DESC) rn FROM t) x WHERE rn = 1 | लचीला, टाई संभालता है |
टाई संचालन
यदि एकाधिक पंक्तियों का समान अधिकतम मान है:
- सबक्वेरी/JOIN: सभी टाई पंक्तियाँ लौटाता है
- ORDER BY LIMIT 1: केवल एक पंक्ति लौटाता है (मनमाना)
- ROW_NUMBER(): नियंत्रणीय टाई-ब्रेकिंग
प्रदर्शन टिप
कॉलम पर इंडेक्स बनाएं: CREATE INDEX idx_score ON DemoTable1449(PlayerScore) त्वरित MAX() लुकअप के लिए।