Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

क्या MySQL में LIMIT क्लॉज के बिना दूसरी सबसे बड़ी रिकॉर्ड चुन सकते हैं?

सबक्वेरी के साथ MAX() का उपयोग

हाँ, LIMIT क्लॉज के बिना दूसरी सबसे बड़ी मान वाली पंक्ति चुनने के लिए सबक्वेरी में MAX() का उपयोग करें।

सिंटैक्स

SELECT MAX(yourColumn) 
FROM yourTableName 
WHERE yourColumn < (SELECT MAX(yourColumn) FROM yourTableName);

उदाहरण

1. टेबल बनाना

mysql> CREATE TABLE DemoTable (Number INT);
Query OK, 0 rows affected (0.66 sec)

2. डेटा डालना

mysql> INSERT INTO DemoTable VALUES(78);
mysql> INSERT INTO DemoTable VALUES(67);
mysql> INSERT INTO DemoTable VALUES(92);
mysql> INSERT INTO DemoTable VALUES(98);
mysql> INSERT INTO DemoTable VALUES(88);
mysql> INSERT INTO DemoTable VALUES(86);
mysql> INSERT INTO DemoTable VALUES(89);

3. सभी रिकॉर्ड्स देखना

mysql> SELECT * FROM DemoTable;
+--------+
| Number |
+--------+
| 78     |
| 67     |
| 92     |
| 98     |
| 88     |
| 86     |
| 89     |
+--------+
7 rows in set (0.00 sec)

4. दूसरी सबसे बड़ी संख्या (LIMIT के बिना)

mysql> SELECT MAX(Number) FROM DemoTable 
    WHERE Number < (SELECT MAX(Number) FROM DemoTable);
+-------------+
| MAX(Number) |
+-------------+
| 92          |
+-------------+
1 row in set (0.00 sec)

तर्क समझाया गया

  1. आंतरिक क्वेरी: SELECT MAX(Number) FROM DemoTable → 98 (सबसे बड़ा)
  2. बाहरी क्वेरी: WHERE Number < 98 → 98 से छोटे सभी मान
  3. बाहरी MAX(): उनमें से सबसे बड़ा → 92 (दूसरा सबसे बड़ा)

अन्य तरीके

DISTINCT के साथ (डुप्लिकेट मान होने पर)

SELECT MAX(DISTINCT Number) FROM DemoTable 
WHERE Number < (SELECT MAX(DISTINCT Number) FROM DemoTable);

पूरी पंक्ति प्राप्त करना (सभी कॉलम)

SELECT * FROM DemoTable 
WHERE Number = (
    SELECT MAX(Number) FROM DemoTable 
    WHERE Number < (SELECT MAX(Number) FROM DemoTable)
);

LIMIT के साथ (सरल, लेकिन LIMIT उपयोग करता है)

SELECT Number FROM DemoTable ORDER BY Number DESC LIMIT 1, 1;

यूज़र-डिफाइंड वेरिएबल (पुराने MySQL के लिए)

SET @row := 0;
SELECT Number FROM (
    SELECT Number, @row := @row + 1 AS rn 
    FROM DemoTable ORDER BY Number DESC
) t WHERE rn = 2;

प्रदर्शन तुलना

तरीका पठनीयता प्रदर्शन डुप्लिकेट हैंडलिंग
सबक्वेरी MAX अच्छी अच्छी (इंडेक्स उपयोग कर सकता है) डुप्लिकेट को एक मानता है
LIMIT 1,1 सबसे सरल अच्छी डुप्लिकेट को अलग पंक्ति मानता है
ROW_NUMBER() (MySQL 8.0+) अच्छी अच्छी नियंत्रण योग्य

MySQL 8.0+ में विंडो फंक्शन

WITH Ranked AS (
    SELECT Number, ROW_NUMBER() OVER (ORDER BY Number DESC) AS rn
    FROM DemoTable
)
SELECT Number FROM Ranked WHERE rn = 2;
  1. - MySQL में AND ऑपरेटर का उपयोग करके विशिष्ट रिकॉर्ड कैसे हटाएं?

    MySQL में DELETE स्टेटमेंट के WHERE क्लॉज में AND ऑपरेटर का उपयोग करके एकाधिक शर्तों के आधार पर विशिष्ट पंक्तियों को हटाया जा सकता है। सिंटैक्स DELETE FROM table_name WHERE condition1 AND condition2 AND ...; उदाहरण तालिका बनाएं और डेटा डालें: mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(

  1. - Python में MySQL का उपयोग करके टेबल से रिकॉर्ड डिलीट करना

    हमें कभी-कभी टेबल से कुछ पंक्तियों को डिलीट करने की आवश्यकता होती है। मान लीजिए, हमारे पास कक्षा में छात्रों के विवरण की एक टेबल है। यह संभव है कि छात्रों में से एक कक्षा छोड़कर चला गया हो और इसलिए, हमें उस विशेष छात्र के विवरण की आवश्यकता नहीं है। इसलिए, हमें उस विशेष पंक्ति या रिकॉर्ड को टेबल से ड

  1. - Python में MySQL का उपयोग करके मानदंड आधारित डेटा चयन करना

    टेबल से सभी डेटा का चयन करना अक्सर आवश्यक नहीं होता है। इसके बजाय, हमें टेबल से किसी शर्त या मानदंड के आधार पर डेटा या पंक्तियों का चयन करने की आवश्यकता होती है। मान लीजिए, हमारे पास एक टेबल है जिसमें कई छात्रों के नाम और अंक शामिल हैं। अब, हमें उन छात्रों के नाम प्राप्त करने की आवश्यकता है जिनके अ