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

MySQL में सबसे अधिक घटनाओं वाले फील्ड मान को कैसे लौटाएं?

MySQL में किसी कॉलम में सबसे अधिक बार आने वाले मान (मोड/Mode) को खोजने के लिए, GROUP BY के साथ COUNT(*) गिनें, फिर ORDER BY COUNT(*) DESC और LIMIT 1 से शीर्ष परिणाम लें।

उदाहरण: सबसे आम FirstName खोजना

डेमो टेबल बनाएं:

mysql> CREATE TABLE DemoTable1940 (FirstName VARCHAR(20));

डेटा इन्सर्ट करें:

mysql> INSERT INTO DemoTable1940 VALUES
('Chris'), ('Mike'), ('Adam'), ('Mike'), ('Chris'), ('David'), ('Mike');

डेटा:

+-----------+
| FirstName |
+-----------+
| Chris     |
| Mike      |
| Adam      |
| Mike      |
| Chris     |
| David     |
| Mike      |
+-----------+

सबसे अधिक गिनती वाला नाम खोजें:

mysql> SELECT FirstName
FROM DemoTable1940
GROUP BY FirstName
ORDER BY COUNT(*) DESC
LIMIT 1;

आउटपुट:

+-----------+
| FirstName |
+-----------+
| Mike      |
+-----------+

गिनती के साथ परिणाम

SELECT FirstName, COUNT(*) AS frequency
FROM DemoTable1940
GROUP BY FirstName
ORDER BY frequency DESC
LIMIT 1;

आउटपुट:

+-----------+-----------+
| FirstName | frequency |
+-----------+-----------+
| Mike      | 3         |
+-----------+-----------+

टाई (बराबरी) संभालना

यदि एकाधिक मानों की समान अधिकतम गिनती हो:

सभी टॉप मान दिखाएं

SELECT FirstName, COUNT(*) AS freq
FROM DemoTable1940
GROUP BY FirstName
HAVING COUNT(*) = (
    SELECT MAX(cnt) FROM (
        SELECT COUNT(*) AS cnt FROM DemoTable1940 GROUP BY FirstName
    ) AS t
);

MySQL 8.0+ विंडो फंक्शन के साथ

WITH ranked AS (
    SELECT FirstName, COUNT(*) AS freq,
           RANK() OVER (ORDER BY COUNT(*) DESC) AS rnk
    FROM DemoTable1940
    GROUP BY FirstName
)
SELECT FirstName, freq FROM ranked WHERE rnk = 1;

उपयोग के मामले

  • सबसे लोकप्रिय उत्पाद/श्रेणी
  • सबसे आम त्रुटि कोड
  • सबसे सक्रिय यूज़र/आईपी
  • सबसे बिकने वाला आइटम

प्रदर्शन

  • कॉलम पर इंडेक्स: INDEX idx_name (FirstName)
  • कवरिंग इंडेक्स: INDEX idx_name (FirstName) ही काफी (केवल इंडेक्स स्कैन)
  • बहुत बड़े टेबल्स के लिए: सैंपलिंग या सामग्रीकृत दृश्य पर विचार करें

नोट

यह क्वेरी "मोड" (सांख्यिकी में सबसे अधिक बार आने वाला मान) खोजती है। LIMIT 1 मनमाने ढंग से एक चुनता है यदि टाई हो; ऊपर दिए गए HAVING/विंडो फंक्शन दृष्टिकोण सभी टॉप मान लौटाते हैं।

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

    ResultSetMetaData का उपयोग करके कॉलम मेटाडेटा प्राप्त करना इसके लिए ResultSetMetaData का उपयोग करें। पहले एक टेबल बनाते हैं: CREATE TABLE DemoTable ( StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentFirstName VARCHAR(20), StudentLastName VARCHAR(20) ); Query OK, 0 rows affect

  1. - MySQL: GROUP BY के साथ फील्ड कैसे अपडेट करें?

    समस्या MySQL सीधे UPDATE में GROUP BY का समर्थन नहीं करता। समाधान: ORDER BY LIMIT का उपयोग करें। उदाहरण टेबल बनाएं: ); डेटा डालें: INSERT INTO DemoTable2018 (EmployeeName, EmployeeSalary) VALUES (Chris, 25400); अपडेट क्वेरी Chris की पहली प्रविष्टि (EmployeeId के अनुसार) का वेतन बढ़ाएं: ORDER B

  1. - MySQL में विभिन्न पंक्तियों से सूची को एक फ़ील्ड में कैसे लौटाएं

    समाधान GROUP_CONCAT() फंक्शन का उपयोग करके GROUP BY के साथ मानों को जोड़ें। उदाहरण टेबल बनाएं: ); डेटा डालें: INSERT INTO DemoTable2024 VALUES (MongoDB, Mike); क्वेरी FROM DemoTable2024 GROUP BY SubjectName; परिणाम +-------------+---------------------------+ | SubjectName | group_concat(Stude