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

SQLite में गणना () परिणामों से डुप्लिकेट निकालें

count() का उपयोग करते समय SQLite में फ़ंक्शन, आप स्वयं को उस स्थिति में पा सकते हैं जहां आप केवल विशिष्ट मानों को गिनना चाहते हैं। यानी, आप नहीं चाहते कि डुप्लीकेट मान कई बार गिने जाएं।

दूसरे शब्दों में, यदि कॉलम का एक ही मान कई बार है, तो उसे केवल एक बार उस मान की गणना करनी चाहिए।

डिफ़ॉल्ट रूप से, count() इसकी गणना में सभी डुप्लिकेट मान शामिल होंगे। उदाहरण के लिए, यदि "कैट" मान 3 बार दिखाई देता है, तो count() इसे 3 के रूप में गिनेंगे।

हालांकि, यदि आप केवल अलग-अलग मानों की गणना करना चाहते हैं, तो count() इसे 1 के रूप में गिना जाएगा।

सौभाग्य से, ऐसा करने का एक आसान तरीका है। आपको केवल DISTINCT . जोड़ना है आपके count() . के लिए कीवर्ड समारोह। इस तरह:

count(DISTINCT x)

जहां x वह कॉलम नाम है जिसके लिए आप सामग्री की गणना कर रहे हैं (या यदि आप तारक वाइल्डकार्ड का उपयोग कर रहे हैं तो पूरी पंक्ति)।

उदाहरण

निम्न तालिका लें:

ProductId   ProductName    Price     
----------  -------------  ----------
1           Widget Holder  139.5     
2           Blue Widget    10.0      
3           Red Widget     10.0      
4           Green Widget   10.0      
5           Widget Stick   89.75     
6           Foo Cap        11.99     

ध्यान दें कि 2 से 4 पंक्तियों में सभी की कीमत समान है (10.0)।

अगर मैं एक सामान्य count() करता हूं कीमत . पर कॉलम, यह सभी छह पंक्तियों की गणना करेगा।

SELECT count(Price) FROM Products;

परिणाम:

6

हालांकि, अगर मैं DISTINCT जोड़ता हूं कीवर्ड, यह उन तीन पंक्तियों को एक के रूप में गिनेगा।

SELECT count(DISTINCT Price) FROM Products;

परिणाम:

4

विभिन्न पंक्तियों की गणना करें

count() फ़ंक्शन तारांकन वाइल्डकार्ड स्वीकार करता है (* ), जिसका अर्थ है कि यह सभी पंक्तियों की गणना करेगा।

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

डुप्लिकेट पंक्तियों वाली एक तालिका यहां दी गई है।

Postal      State             
----------  ------------------
NSW         New South Wales   
NSW         New South Wales   
QLD         Queensland        
TAS         Tasmania          
SA          South Australia   
WA          Western Australia 
VIC         Victoria          

सिद्धांत रूप में, मुझे DISTINCT . का उपयोग करने में सक्षम होना चाहिए इस तालिका में "डी-डुप्लिकेट" पंक्तियों की गणना करने के लिए। हालांकि, यह संभव नहीं लगता।

SELECT count(DISTINCT *)
FROM States;

परिणाम:

Error: near "*": syntax error

इसके बजाय, मुझे DISTINCT . का उपयोग करते समय एक कॉलम नाम निर्दिष्ट करने की आवश्यकता है कीवर्ड।

SELECT 
  count(State),
  count(DISTINCT State)
FROM States;

परिणाम:

count(State)  count(DISTINCT State)
------------  ---------------------
7             6                    

इसे करने का दूसरा तरीका कुछ इस तरह करना होगा:

SELECT count(*) FROM (SELECT DISTINCT * FROM States);

परिणाम:

6

हालांकि यह वास्तव में कोई समस्या नहीं होनी चाहिए, क्योंकि इस तरह की डुप्लिकेट पंक्तियों को अनुमति देने के लिए आमतौर पर यह अच्छा डेटाबेस डिज़ाइन नहीं है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्थानीय डीबी के साथ फायरबेस डीबी का प्रयोग करें

  2. SQLite दिनांक/समय कार्यों के लिए मान्य समय स्ट्रिंग प्रारूप

  3. SQLite - डेटा चुनें

  4. SQLite में जूलियन दिवस वापस करने के 2 तरीके

  5. SQLite में NULL को "N/A" से बदलने के 3 तरीके