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

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

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

नमूना डेटा

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

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 
    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
     2 | Scratch | Cat     |     1
     3 | Tweet   | Bird    |     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() . का उपयोग करना है विंडो फ़ंक्शन:

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. SQL यादृच्छिक डेटा के साथ तालिका पॉप्युलेट करें

  2. DRBD का उपयोग करके PostgreSQL के लिए वॉल्यूम स्तर प्रतिकृति का अवलोकन

  3. मेरा PostgreSQL डेटाबेस डिस्क स्थान से बाहर है

  4. डीओ ब्लॉक के अंदर psql मेटा-कमांड द्वारा निर्धारित चर का उपयोग करें

  5. पायथन में प्रक्रियाओं में डीबी पोस्टग्रेज करने के लिए कनेक्शन साझा करें