सबक्वेरी में MAX() के साथ शीर्ष रिकॉर्ड प्राप्त करना
जब एकाधिक उत्पादों का समान अधिकतम मूल्य हो और आपको उन सभी को दिखाना हो, तो सबक्वेरी में MAX() का उपयोग करके फ़िल्टर करें।
टेबल और डेटा
mysql> CREATE TABLE DemoTable (
ProductId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ProductName VARCHAR(100),
ProductAmount INT
);
Query OK, 0 rows affected (0.53 sec)
mysql> INSERT INTO DemoTable(ProductName,ProductAmount) VALUES('Product-1',60);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(ProductName,ProductAmount) VALUES('Product-2',40);
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable(ProductName,ProductAmount) VALUES('Product-3',75);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable(ProductName,ProductAmount) VALUES('Product-4',50);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(ProductName,ProductAmount) VALUES('Product-5',75);
Query OK, 1 row affected (0.12 sec)
सभी रिकॉर्ड
mysql> SELECT * FROM DemoTable;
+-----------+-------------+---------------+ | ProductId | ProductName | ProductAmount | +-----------+-------------+---------------+ | 1 | Product-1 | 60 | | 2 | Product-2 | 40 | | 3 | Product-3 | 75 | | 4 | Product-4 | 50 | | 5 | Product-5 | 75 | +-----------+-------------+---------------+ 5 rows in set (0.00 sec)
अधिकतम राशि वाले सभी उत्पाद
mysql> SELECT * FROM DemoTable
WHERE ProductAmount = (SELECT MAX(ProductAmount) FROM DemoTable);
परिणाम:
+-----------+-------------+---------------+ | ProductId | ProductName | ProductAmount | +-----------+-------------+---------------+ | 3 | Product-3 | 75 | | 5 | Product-5 | 75 | +-----------+-------------+---------------+ 2 rows in set (0.00 sec)
व्याख्या: सबक्वेरी MAX(ProductAmount) = 75 देती है। बाहरी क्वेरी 75 वाली सभी पंक्तियां लौटाती है। यह ORDER BY ... LIMIT 1 से बेहतर है जो केवल एक पंक्ति देता।
वैकल्पिक (MySQL 8.0+): SELECT * FROM DemoTable WHERE ProductAmount = (SELECT MAX(ProductAmount) FROM DemoTable); समान। या विंडो फंक्शन: SELECT * FROM (SELECT *, MAX(ProductAmount) OVER() AS max_amt FROM DemoTable) t WHERE ProductAmount = max_amt;