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

MySQL क्वेरी: प्रत्येक समूह के लिए एकाधिक न्यूनतम मान प्राप्त करना

परिचय

जब आपको प्रत्येक समूह (जैसे प्रत्येक छात्र) के लिए न्यूनतम मान वाली पंक्तियां चाहिए, तो सबक्वेरी के साथ MIN() एग्रीगेट फंक्शन का उपयोग किया जा सकता है।

उदाहरण: टेबल बनाना और डेटा डालना

mysql> CREATE TABLE DemoTable (
    -> Name VARCHAR(20),
    -> Score INT
    -> );
Query OK, 0 rows affected (0.56 sec)
mysql> INSERT INTO DemoTable VALUES('John', 56);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES('John', 45);
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO DemoTable VALUES('John', 58);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('Chris', 43);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('Chris', 38);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('Chris', 87);
Query OK, 1 row affected (0.14 sec)

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

mysql> SELECT * FROM DemoTable;

आउटपुट:

+-------+-------+
| Name  | Score |
+-------+-------+
| John  | 56    |
| John  | 45    |
| John  | 58    |
| Chris | 43    |
| Chris | 38    |
| Chris | 87    |
+-------+-------+
6 rows in set (0.00 sec)

प्रत्येक नाम के लिए न्यूनतम स्कोर वाली पंक्तियां प्राप्त करने की क्वेरी

mysql> SELECT * FROM DemoTable tbl1
    -> WHERE Score IN (
    ->   SELECT MIN(Score) FROM DemoTable tbl2 WHERE tbl1.Name = tbl2.Name
    -> );

परिणाम

+-------+-------+
| Name  | Score |
+-------+-------+
| John  | 45    |
| Chris | 38    |
+-------+-------+
2 rows in set (0.00 sec)

व्याख्या

  • tbl1 और tbl2 एक ही टेबल के उपनाम
  • सबक्वेरी: प्रत्येक tbl1.Name के लिए, tbl2 में उसी नाम का न्यूनतम स्कोर ढूंढता है
  • WHERE Score IN (...) - मुख्य क्वेरी उन पंक्तियों को चुनती है जिनका स्कोर सबक्वेरी परिणाम से मेल खाता है
  • सहसंबद्ध सबक्वेरी (correlated subquery): बाहरी क्वेरी के प्रत्येक पंक्ति के लिए आंतरिक क्वेरी चलती है

बेहतर विकल्प: JOIN के साथ (अधिक कुशल)

SELECT t1.* FROM DemoTable t1
JOIN (
  SELECT Name, MIN(Score) AS min_score FROM DemoTable GROUP BY Name
) t2 ON t1.Name = t2.Name AND t1.Score = t2.min_score;

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

SELECT Name, Score FROM (
  SELECT Name, Score,
         ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Score ASC) AS rn
  FROM DemoTable
) t WHERE rn = 1;

नोट

यदि एक नाम के लिए एकाधिक पंक्तियों में समान न्यूनतम स्कोर हो, तो सभी लौटाई जाएंगी। केवल एक पंक्ति प्रति समूह के लिए ROW_NUMBER() या LIMIT 1 प्रति समूह (MySQL 8.0 में मुश्किल) उपयोग करें।

  1. - MySQL में एक ही क्वेरी से अलग-अलग कॉलम मानों में एकाधिक शब्दों को खोजें

    परिचय MySQL में किसी टेबल के कॉलम में एक साथ कई शब्दों को खोजने के लिए WHERE क्लॉज के साथ एकाधिक LIKE ऑपरेटर का उपयोग किया जा सकता है। यह तरीका तब उपयोगी होता है जब आपको किसी टेक्स्ट कॉलम में कई कीवर्ड्स की उपस्थिति जांचनी हो। उदाहरण: टेबल बनाना और डेटा डालना सबसे पहले एक डेमो टेबल बनाते हैं: ); Q

  1. - विशिष्ट कॉलम मानों के लिए एकल MySQL क्वेरी में एकाधिक काउंट प्राप्त करें

    इसके लिए, आप विशिष्ट कॉलम के लिए पैरामीटर मान के साथ एग्रीगेट फंक्शन SUM() का उपयोग कर सकते हैं। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows affected (0.94 sec) इन्सर्ट कमा

  1. - एकल MySQL क्वेरी में एक कॉलम में एकाधिक मान कैसे डालें?

    सिंटैक्स एक कॉलम में एकाधिक मान डालने के लिए, निम्नलिखित सिंटैक्स का उपयोग करें: INSERT INTO yourTableName VALUES (yourValue1), (yourValue2), ... (yourValueN); उदाहरण सबसे पहले एक टेबल बनाते हैं: ); अब INSERT कमांड का उपयोग करके रिकॉर्ड डालें: INSERT INTO DemoTable2022 VALUES (Computer Science)