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

MySQL में GROUP BY समूह में मान की उपस्थिति निर्धारित करना - SUM और IF का उपयोग

समाधान: SUM() के साथ शर्तीय अभिव्यक्ति

किसी GROUP BY समूह में विशिष्ट मान की उपस्थिति जांचने के लिए SUM() के साथ IF() या बूलियन अभिव्यक्ति का उपयोग करें।

सिंटैक्स

SELECT 
    groupColumn,
    IF(SUM(targetColumn = 'value'), 'YES', 'NO') AS hasValue
FROM yourTableName
GROUP BY groupColumn;

व्यावहारिक उदाहरण

टेबल बनाना और डेटा डालना

mysql> CREATE TABLE GroupbygroupDemo (
    -> UserId INT,
    -> UserName VARCHAR(20)
    -> );

mysql> INSERT INTO GroupbygroupDemo VALUES
    -> (10, 'John'), (10, 'Carol'), (10, 'Carol'),
    -> (20, 'David'),
    -> (30, 'John'), (30, 'David'), (30, 'Mike');

डेटा (7 पंक्तियाँ)

UserIdUserName
10John
10Carol
10Carol
20David
30John
30David
30Mike

क्वेरी: प्रत्येक UserId समूह में 'David' की उपस्थिति जांचना

mysql> SELECT 
    -> UserId,
    -> IF(SUM(UserName = 'David'), 'YES', 'NO') AS Correct_Name_David
    -> FROM GroupbygroupDemo
    -> GROUP BY UserId;

परिणाम

UserIdCorrect_Name_David
10NO
20YES
30YES

व्याख्या

  • UserName = 'David' प्रत्येक पंक्ति के लिए 1 (सत्य) या 0 (असत्य) लौटाता है
  • SUM() इन 1 और 0 को जोड़ता है = 'David' की घटनाओं की संख्या
  • IF(SUM(...) > 0, 'YES', 'NO') - यदि योग > 0 तो मौजूद है
  • MySQL में शर्तीय संदर्भ में कोई भी गैर-शून्य मान TRUE होता है

वैकल्पिक सिंटैक्स

CASE WHEN का उपयोग

SELECT UserId,
    CASE WHEN SUM(UserName = 'David') > 0 THEN 'YES' ELSE 'NO' END AS hasDavid
FROM GroupbygroupDemo
GROUP BY UserId;

MAX के साथ (बूलियन के लिए)

SELECT UserId,
    MAX(UserName = 'David') AS hasDavid
FROM GroupbygroupDemo
GROUP BY UserId;

MAX(बूलियन) = 1 यदि कोई TRUE है, अन्यथा 0

EXISTS उपक्वेरी के साथ (अक्सर तेज़)

SELECT DISTINCT g1.UserId,
    CASE WHEN EXISTS (
        SELECT 1 FROM GroupbygroupDemo g2 
        WHERE g2.UserId = g1.UserId AND g2.UserName = 'David'
    ) THEN 'YES' ELSE 'NO' END AS hasDavid
FROM GroupbygroupDemo g1;

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

  • फीचर फ्लैग जांच: क्या समूह में विशेष अधिकार वाला उपयोगकर्ता है?
  • डेटा गुणवत्ता: क्या प्रत्येक ग्राहक के पास आवश्यक दस्तावेज़ प्रकार है?
  • सेगमेंटेशन: क्या उपयोगकर्ता समूह में प्रीमियम सदस्य है?
  1. - MySQL में ग्रुप करके रैंडम ऑर्डर में डेटा कैसे प्राप्त करें?

    MySQL में ग्रुपिंग के साथ रैंडम ऑर्डरिंग MySQL में जब आप किसी कॉलम के आधार पर ग्रुप बनाते हैं और फिर उन ग्रुप्स को रैंडम ऑर्डर में दिखाना चाहते हैं, तो इसके लिए एक सबक्वेरी के साथ RAND() फंक्शन का उपयोग किया जाता है। उदाहरण के लिए टेबल बनाना CREATE TABLE DemoTable ( Id INT NOT NULL AUTO_INCREME

  1. - MySQL में IFNULL() से NULL मान को 0 में बदलना

    MySQL में NULL मानों को डिफ़ॉल्ट मान (जैसे 0) से बदलने के लिए IFNULL() फ़ंक्शन का उपयोग किया जाता है। यह गणनाओं और रिपोर्टिंग में NULL-संबंधी समस्याओं से बचाता है। उदाहरण के लिए टेबल बनाना mysql> CREATE TABLE DemoTable ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Value INT ); डेटा डालन

  1. - MySQL में ORDER BY FIELD को GROUP BY के साथ एकल क्वेरी में कैसे उपयोग करें

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