MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

मारियाडीबी में डुप्लिकेट पंक्तियों का चयन करने के 4 तरीके

यदि आपके पास एक तालिका है जिसके बारे में आपको संदेह है कि आपके MariaDB डेटाबेस में डुप्लिकेट पंक्तियाँ हैं, तो आप निम्न में से किसी भी क्वेरी का उपयोग करके यह अनुमान लगा सकते हैं कि कितनी पंक्तियाँ डुप्लिकेट हैं।

नमूना डेटा

मान लीजिए हमारे पास निम्न डेटा वाली एक तालिका है:

SELECT * FROM Pets;

परिणाम:

+---------+-----------+-----------+
| PetId   | PetName   | PetType   |
|---------+-----------+-----------|
| 1       | Wag       | Dog       |
| 1       | Wag       | Dog       |
| 2       | Scratch   | Cat       |
| 3       | Tweet     | Bird      |
| 4       | Bark      | Dog       |
| 4       | Bark      | Dog       |
| 4       | Bark      | Dog       |
+---------+-----------+-----------+

पहली दो पंक्तियाँ डुप्लिकेट हैं, और अंतिम तीन पंक्तियाँ डुप्लिकेट हैं।

विकल्प 1

हम निम्नलिखित क्वेरी का उपयोग यह देखने के लिए कर सकते हैं कि कितनी पंक्तियाँ डुप्लिकेट हैं:

SELECT 
    DISTINCT PetId, 
    COUNT(*) AS "Count"
FROM Pets
GROUP BY PetId
ORDER BY PetId;

परिणाम:

+---------+---------+
| PetId   | Count   |
|---------+---------|
| 1       | 2       |
| 2       | 1       |
| 3       | 1       |
| 4       | 3       |
+---------+---------+

हम SELECT . का विस्तार कर सकते हैं यदि आवश्यक हो तो और कॉलम शामिल करने के लिए सूची:

SELECT 
    PetId,
    PetName,
    PetType,
    COUNT(*) AS "Count"
FROM Pets
GROUP BY 
    PetId,
    PetName,
    PetType
ORDER BY PetId;

परिणाम:

+---------+-----------+-----------+---------+
| PetId   | PetName   | PetType   | Count   |
|---------+-----------+-----------+---------|
| 1       | Wag       | Dog       | 2       |
| 2       | Scratch   | Cat       | 1       |
| 3       | Tweet     | Bird      | 1       |
| 4       | Bark      | Dog       | 3       |
+---------+-----------+-----------+---------+

हम वैकल्पिक रूप से इसे अवरोही क्रम में गिनती के आधार पर ऑर्डर कर सकते हैं, ताकि सबसे अधिक डुप्लिकेट वाली पंक्तियाँ पहले दिखाई दें:

SELECT 
    PetId,
    PetName,
    PetType,
    COUNT(*) AS "Count"
FROM Pets
GROUP BY 
    PetId,
    PetName,
    PetType
ORDER BY Count DESC;

परिणाम:

+-------+---------+---------+-------+
| PetId | PetName | PetType | Count |
+-------+---------+---------+-------+
|     4 | Bark    | Dog     |     3 |
|     1 | Wag     | Dog     |     2 |
|     3 | Tweet   | Bird    |     1 |
|     2 | Scratch | Cat     |     1 |
+-------+---------+---------+-------+

विकल्प 2

यदि हम केवल डुप्लिकेट पंक्तियों को सूचीबद्ध करना चाहते हैं, तो हम HAVING का उपयोग कर सकते हैं गैर-डुप्लिकेट पंक्तियों को बाहर करने के लिए खंड:

SELECT 
    PetId,
    PetName,
    PetType,
    COUNT(*) AS "Count"
FROM Pets
GROUP BY 
    PetId,
    PetName,
    PetType
HAVING COUNT(*) > 1
ORDER BY PetId;

परिणाम:

+-------+---------+---------+-------+
| PetId | PetName | PetType | Count |
+-------+---------+---------+-------+
|     1 | Wag     | Dog     |     2 |
|     4 | Bark    | Dog     |     3 |
+-------+---------+---------+-------+

विकल्प 3

इसे करने का दूसरा तरीका ROW_NUMBER() . का उपयोग करना है PARTITION BY . के साथ कार्य करें परिणाम सेट के आउटपुट को क्रमांकित करने के लिए क्लॉज।

SELECT 
    *, 
    ROW_NUMBER() OVER ( 
        PARTITION BY PetId, PetName, PetType 
        ORDER BY PetId, PetName, PetType
        ) AS Row_Number
FROM Pets;

परिणाम:

+-------+---------+---------+------------+
| PetId | PetName | PetType | Row_Number |
+-------+---------+---------+------------+
|     1 | Wag     | Dog     |          1 |
|     1 | Wag     | Dog     |          2 |
|     2 | Scratch | Cat     |          1 |
|     3 | Tweet   | Bird    |          1 |
|     4 | Bark    | Dog     |          1 |
|     4 | Bark    | Dog     |          2 |
|     4 | Bark    | Dog     |          3 |
+-------+---------+---------+------------+

PARTITION BY क्लॉज FROM . द्वारा निर्मित परिणाम सेट को विभाजित करता है विभाजन में खंड जिस पर फ़ंक्शन लागू होता है। जब हम परिणाम सेट के लिए विभाजन निर्दिष्ट करते हैं, तो प्रत्येक विभाजन नंबरिंग को फिर से शुरू करने का कारण बनता है (यानी प्रत्येक विभाजन में पहली पंक्ति के लिए नंबरिंग 1 से शुरू होगी)।

विकल्प 4

मिलान करने वाले डुप्लीकेट से केवल अधिशेष पंक्तियों को वापस करने के लिए, हम उपरोक्त क्वेरी को सामान्य तालिका अभिव्यक्ति के रूप में उपयोग कर सकते हैं, जैसे:

WITH cte AS 
    (
        SELECT 
            *, 
            ROW_NUMBER() OVER ( 
                PARTITION BY PetId, PetName, PetType 
                ORDER BY PetId, PetName, PetType
                ) AS Row_Number
        FROM Pets
    )
SELECT * FROM cte WHERE Row_Number <> 1;

परिणाम:

+-------+---------+---------+------------+
| PetId | PetName | PetType | Row_Number |
+-------+---------+---------+------------+
|     1 | Wag     | Dog     |          2 |
|     4 | Bark    | Dog     |          2 |
|     4 | Bark    | Dog     |          3 |
+-------+---------+---------+------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे MONTH () मारियाडीबी में काम करता है

  2. C++ प्रोग्राम को MariaDB से कैसे कनेक्ट करें

  3. MySQL और MariaDB के लिए स्कीमा प्रबंधन युक्तियाँ

  4. मारियाडीबी सर्वर 10.3 . में स्वचालित डेटा संस्करण

  5. "ERROR 1054 (42S22) को ठीक करें:मारियाडीबी में 'ऑर्डर क्लॉज" में अज्ञात कॉलम 'कॉलनेम'