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

MySQL में ORDER BY DESC LIMIT OFFSET से दूसरा अधिकतम मान ढूंढें

MySQL में ORDER BY ... DESC LIMIT 1 OFFSET 1 का उपयोग करके दूसरा सबसे बड़ा मान (second maximum) प्राप्त कर सकते हैं।

सिंटैक्स

SELECT * FROM टेबल_नाम
ORDER BY कॉलम_नाम DESC
LIMIT 1 OFFSET 1;

उदाहरण

1. टेबल बनाएं

mysql> CREATE TABLE DemoTable (Value INT);

2. डेटा डालें

mysql> INSERT INTO DemoTable VALUES(1), (2), (4), (204), (5);

3. सभी मान

mysql> SELECT * FROM DemoTable;
+-------+
| Value |
+-------+
| 1     |
| 2     |
| 4     |
| 204   |
| 5     |
+-------+

4. दूसरा अधिकतम

mysql> SELECT * FROM DemoTable
    -> ORDER BY Value DESC
    -> LIMIT 1 OFFSET 1;

5. परिणाम

+-------+
| Value |
+-------+
| 5     |
+-------+

व्याख्या

  1. ORDER BY Value DESC - अवरोही क्रम: 204, 5, 4, 2, 1
  2. OFFSET 1 - पहली पंक्ति (204) छोड़ें
  3. LIMIT 1 - अगली एक पंक्ति लें (5)

Nth अधिकतम के लिए सामान्य सूत्र

-- Nth अधिकतम (1-based: 1=अधिकतम, 2=दूसरा अधिकतम...)
SELECT * FROM टेबल_नाम
ORDER BY कॉलम_नाम DESC
LIMIT 1 OFFSET (N-1);

डुप्लिकेट मान होने पर

-- विशिष्ट Nth पंक्ति (डुप्लिकेट सहित)
LIMIT 1 OFFSET 1

-- विशिष्ट Nth अलग मान
SELECT DISTINCT Value FROM DemoTable ORDER BY Value DESC LIMIT 1 OFFSET 1

प्रदर्शन

  • इंडेक्स वाले कॉलम पर बहुत तेज़
  • बड़े ऑफसेट के लिए धीमा (OFFSET N को N पंक्तियां छोड़नी पड़ती हैं)
  • बड़े N के लिए विंडो फ़ंक्शन (MySQL 8.0+) बेहतर

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

SELECT Value FROM (
    SELECT Value, ROW_NUMBER() OVER (ORDER BY Value DESC) AS rn
    FROM DemoTable
) t WHERE rn = 2;
  1. - MySQL में सबक्वेरी से दूसरा सबसे बड़ा अंक प्राप्त करें

    नेस्टेड सबक्वेरी के साथ दूसरा सर्वोच्च मान खोजना सबसे बड़ा मान खोजने के बाद, उससे छोटा सबसे बड़ा मान दूसरा सर्वोच्च होता है। इसके लिए नेस्टेड MAX() सबक्वेरी का उपयोग करें। टेबल और डेटा CREATE TABLE DemoTable( Marks INT ); Query OK, 0 rows affected (1.34 sec) INSERT INTO DemoTable VALUES(99);

  1. - MySQL सिंटैक्स त्रुटि (SELECT क्वेरी में) 'group' को टेबल नाम के रूप में उपयोग करते समय

    GROUP एक आरक्षित कीवर्ड है, आप इसे टेबल नाम के रूप में उपयोग नहीं कर सकते। इसलिए, इसे टेबल नाम के रूप में उपयोग करने पर त्रुटि होगी। ऐसी त्रुटि से बचने के लिए, आपको टेबल नाम group के आसपास बैकटिक्स प्रतीक का उपयोग करना होगा। आइए अब एक उदाहरण देखते हैं और एक टेबल बनाते हैं: mysql> create table `g

  1. - MySQL में INSERT INTO SELECT से दूसरी टेबल के मान लेकर नई टेबल भरें

    सिंटैक्स insert into targetTable(col1, col2) select sourceCol1, sourceCol2 from sourceTable where condition; उदाहरण insert into demo83(id,username) select id,name from demo82 where id=101; परिणाम +------+----------+ | id | username | +------+----------+ | 101 | Bob | | 101 | David |