MySQL में किसी कॉलम (जैसे अपवोट) के अधिकतम मान वाली पंक्ति का संबंधित कॉलम मान (जैसे छवि पथ) प्राप्त करने के लिए सबक्वेरी के साथ IN या = ऑपरेटर का उपयोग करें।
सिंटैक्स
SELECT column_to_get FROM table_name WHERE max_column IN (SELECT MAX(max_column) FROM table_name);
व्यावहारिक उदाहरण
1. टेबल बनाएं और डेटा डालें
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ImagePath VARCHAR(100),
UpvoteValue INT
);
Query OK, 0 rows affected (0.72 sec)
mysql> INSERT INTO DemoTable (ImagePath, UpvoteValue) VALUES
('Image1.jpeg', 90),
('Image2.jpeg', 10),
('Image3.jpeg', 120),
('Image4.jpeg', 114);
Query OK, 4 rows affected (0.25 sec)
2. सभी रिकॉर्ड्स देखें
mysql> SELECT * FROM DemoTable; +----+-------------+-------------+ | Id | ImagePath | UpvoteValue | +----+-------------+-------------+ | 1 | Image1.jpeg | 90 | | 2 | Image2.jpeg | 10 | | 3 | Image3.jpeg | 120 | | 4 | Image4.jpeg | 114 | +----+-------------+-------------+ 4 rows in set (0.00 sec)
3. अधिकतम अपवोट वाली छवि प्राप्त करें
mysql> SELECT ImagePath FROM DemoTable WHERE UpvoteValue IN (SELECT MAX(UpvoteValue) FROM DemoTable); +-------------+ | ImagePath | +-------------+ | Image3.jpeg | +-------------+ 1 row in set (0.00 sec)
वैकल्पिक तरीके
सबक्वेरी के साथ = (एकल मान के लिए)
SELECT ImagePath FROM DemoTable WHERE UpvoteValue = (SELECT MAX(UpvoteValue) FROM DemoTable);
JOIN के साथ (अधिक कुशल बड़े डेटासेट के लिए)
SELECT d.ImagePath FROM DemoTable d JOIN (SELECT MAX(UpvoteValue) AS max_upvote FROM DemoTable) m ON d.UpvoteValue = m.max_upvote;
ORDER BY + LIMIT (सरल)
SELECT ImagePath FROM DemoTable ORDER BY UpvoteValue DESC LIMIT 1;
विंडो फ़ंक्शन (MySQL 8.0+)
SELECT ImagePath FROM (
SELECT ImagePath, UpvoteValue,
MAX(UpvoteValue) OVER () AS max_upvote
FROM DemoTable
) t WHERE UpvoteValue = max_upvote;
टाई (बराबरी) संभालना
यदि एकाधिक पंक्तियों में समान अधिकतम मान है:
IN/=/JOIN- सभी टाई पंक्तियाँ लौटाते हैंLIMIT 1- केवल एक लौटाता है (कौन सा अनिश्चित)- निश्चित टाई-ब्रेकिंग के लिए:
ORDER BY UpvoteValue DESC, Id LIMIT 1
प्रदर्शन तुलना
| तरीका | प्रदर्शन | टाई हैंडलिंग |
|---|---|---|
| सबक्वेरी IN/= | अच्छा (इंडेक्स के साथ) | सभी टाई |
| JOIN | बहुत अच्छा | सभी टाई |
| ORDER BY LIMIT | अच्छा (इंडेक्स के साथ) | एक (अनिश्चित) |
| विंडो फ़ंक्शन | अच्छा | सभी टाई |
सर्वोत्तम अभ्यास
- UpvoteValue कॉलम पर इंडेक्स बनाएं
- सरल मामलों के लिए ORDER BY LIMIT उपयोग करें
- जटिल क्वेरीज़/बड़े डेटा के लिए JOIN या विंडो फ़ंक्शन प्राथमिकता दें