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