एक कॉलम में विभिन्न मूल्यों की संख्या को खोजने के लिए एसक्यूएल


342

मैं निम्नलिखित तरीकों से एक कॉलम में सभी अलग-अलग मानों का चयन कर सकता हूं:

  • SELECT DISTINCT column_name FROM table_name;
  • SELECT column_name FROM table_name GROUP BY column_name;

लेकिन मैं उस क्वेरी से पंक्ति की गिनती कैसे प्राप्त करूं? क्या एक उपश्रेणी की आवश्यकता है?


1
SQL सर्वर का कौन सा संस्करण आप उपयोग कर रहे हैं?
केविन फेयरचाइल्ड

जवाबों:


614

आप कुल फ़ंक्शन के DISTINCTभीतर कीवर्ड का उपयोग कर सकते हैं COUNT:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

यह उस स्तंभ के लिए केवल विशिष्ट मानों की गणना करेगा।


7
नीट, मुझे नहीं पता था कि आप वहां अलग कीवर्ड डाल सकते हैं।
क्रिश्चियन अवार्ड

13
समूहों पर भी काम करता हैselect A,COUNT(DISTINCT B) from table group by A
tmanthey

6
क्या आप इस उदाहरण को कई स्तंभों पर अलग-अलग कर सकते हैं?
यूजीन

11 साल बाद, और यह अभी भी उपयोगी है
wundermahn

176

यह आपको अलग-अलग कॉलम मान और प्रत्येक मान की गिनती देगा। मुझे आमतौर पर लगता है कि मैं जानकारी के दोनों टुकड़ों को जानना चाहता हूं।

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]

60
चूंकि आप समूह बना रहे हैं columnName, इसलिए आपको पहले से ही एक बार अलग-अलग मान मिल रहे हैं और distinctकीवर्ड यहां कुछ भी नहीं करता है। इसके बिना क्वेरी का प्रयास करें, परिणाम बिल्कुल समान है।
एंटिटी

26

ध्यान रखें कि गणना () शून्य मानों को नजरअंदाज करती है, इसलिए यदि आपको अपने स्वयं के अलग मूल्य के रूप में अशक्त के लिए अनुमति देने की आवश्यकता है, तो आप कुछ ट्रिक जैसे कर सकते हैं:

select count(distinct my_col)
       + count(distinct Case when my_col is null then 1 else null end)
from my_table
/

मुझे सच में लगता है कि आपका केस स्टेटमेंट कहने के लिए था:case when my_col is null then 1 else my_col end
जेम्स जेन्सेन

स्पष्टता के लिए:SELECT my_col, COUNT(my_col) + COUNT(CASE WHEN my_col IS NULL THEN 1 ELSE NULL END) as CountOf from my_Table GROUP BY my_col
माइकल पॉलुकोनिस

गिनती (*) में nulls शामिल हैं
PragmaticProgrammer

1
@PragmaticProgrammer मुझे ऐसा लगता है, लेकिन एक अशक्त पंक्ति के रूप में ऐसी कोई बात नहीं है, केवल एक शून्य मान है, और count(*)विशेष रूप से पंक्तियों की एक गिनती है।
डेविड एल्ड्रिज

20

स्तंभ_नाम के विशिष्ट मानों का एक वर्ग योग और आवृत्ति द्वारा छांटा गया:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;

1
निश्चित रूप से सबसे अच्छा जवाब IMO
Briford Wylie

13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

यह स्तंभों के अलग-अलग समूह की गिनती देगा।


11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

आपको उस अलग कॉल को गिनना है, फिर उसे एक उपनाम दें।



0

**

एसक्यूएल का उपयोग करके हम Oracle 11g में अलग कॉलम वैल्यू काउंट प्राप्त कर सकते हैं ।

**

Select count(distinct(Column_Name)) from TableName

0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

आप इस क्वेरी का उपयोग अलग / अलग डेटा को गिनने के लिए कर सकते हैं। धन्यवाद


0

MS SQL Server 2012 के बाद, आप विंडो फ़ंक्शन का भी उपयोग कर सकते हैं।

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 

-8

गणना (विशिष्ट ({फ़ील्डनाम})) निरर्थक है

बस गणना ({फ़ील्डनाम}) आपको उस तालिका में सभी अलग-अलग मान देता है। यह (कई अनुमान के अनुसार) आपको केवल तालिका की गणना नहीं देगा [अर्थात तालिका से गणना (*) के समान नहीं है]


2
नहीं, यह सही नहीं है। count(field)जहां fieldहै वहां लाइनों की संख्या लौटाता है not null
Antti29
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.