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

MySQL में DISTINCT ORDER BY DESC LIMIT OFFSET से Nth उच्चतम मान चुनें

MySQL में DISTINCT, ORDER BY DESC, और LIMIT ... OFFSET का संयोजन उपयोग करके Nth उच्चतम विशिष्ट मान प्राप्त कर सकते हैं।

सिंटैक्स

SELECT DISTINCT कॉलम_नाम FROM टेबल_नाम
ORDER BY कॉलम_नाम DESC
LIMIT (N-1), 1;

उदाहरण: 3rd उच्चतम अंक (N=3)

1. टेबल बनाएं

mysql> CREATE TABLE DemoTable1594 (Marks INT);

2. डेटा डालें

mysql> INSERT INTO DemoTable1594 VALUES(76), (95), (56), (96), (89);

3. सभी मान (अवरोही)

mysql> SELECT * FROM DemoTable1594 ORDER BY Marks DESC;
+-------+
| Marks |
+-------+
| 96    |  -- 1st highest
| 95    |  -- 2nd highest
| 89    |  -- 3rd highest
| 76    |
| 56    |
+-------+

4. 3rd उच्चतम (N=3 → OFFSET 2)

mysql> SELECT DISTINCT Marks FROM DemoTable1594
    -> ORDER BY Marks DESC
    -> LIMIT 2, 1;

5. परिणाम

+-------+
| Marks |
+-------+
| 89    |
+-------+

सामान्य सूत्र

चाहिएOFFSETLIMIT
1st उच्चतम (अधिकतम)01
2nd उच्चतम11
3rd उच्चतम21
Nth उच्चतमN-11

DISTINCT का महत्व

DISTINCT के बिना डुप्लिकेट मान होने पर गलत रैंक मिलेगी:

-- डेटा: 100, 100, 90, 80
-- DISTINCT बिना: 1st=100, 2nd=100, 3rd=90
-- DISTINCT साथ: 1st=100, 2nd=90, 3rd=80

MySQL 8.0+: विंडो फ़ंक्शन (बेहतर)

SELECT Marks FROM (
    SELECT DISTINCT Marks,
           DENSE_RANK() OVER (ORDER BY Marks DESC) AS rnk
    FROM DemoTable1594
) t WHERE rnk = 3;

प्रदर्शन

  • इंडेक्स वाले कॉलम पर तेज़
  • बड़े ऑफसेट के लिए धीमा
  • विंडो फ़ंक्शन बड़े N के लिए बेहतर

संबंधित: Nth न्यूनतम

SELECT DISTINCT Marks FROM DemoTable1594
ORDER BY Marks ASC
LIMIT (N-1), 1;
  1. - MySQL में Nth अधिकतम मान खोजने का क्वेरी

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Value int -> ); Query OK, 0 rows affected (0.59 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(40); Query OK, 1 row affected (0.26 sec) mysql> insert into DemoTable

  1. - MySQL में मान 0 होने पर दूसरे कॉलम का मान कैसे चुनें?

    IF() फ़ंक्शन का उपयोग यदि किसी कॉलम का मान 0 है तो दूसरे कॉलम का मान लेने के लिए IF() फ़ंक्शन प्रयोग करें: select IF(yourColumnName1=0, yourColumnName2, yourColumnName1) as anyAliasName from yourTableName; टेबल बनाना और डेटा डालना insert into demo30(value,original_value) values(30,0); डेटा देखना

  1. - MySQL में सबसे अधिक सैलरी कैसे चुनें?

    MAX() फ़ंक्शन किसी कॉलम का अधिकतम मान प्राप्त करने के लिए: select MAX(yourColumnName) AS anyAliasName from yourTableName; उदाहरण insert into demo44(employee_name,employee_salary) values(John,3000), (David,4500), (Bob,3500), (Carol,5500), (Mike,4900); क्वेरी और परिणाम select MAX(employee_salary)