SQL सर्वर क्वेरी - DISTINCT के साथ COUNT (*) का चयन करना


431

SQL Server 2005 में मेरे पास एक टेबल cm_production है जो उत्पादन में डाले गए सभी कोड को सूचीबद्ध करता है। तालिका में कुछ अन्य स्तंभों के साथ एक टिकट_नंबर, प्रोग्राम_टाइप और प्रोग्राम_नाम और पुश_नंबर है।

लक्ष्य: कार्यक्रम के प्रकार और पुश नंबर द्वारा सभी DISTINCT प्रोग्राम नामों की गणना करें

मेरे पास अब तक क्या है:

DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type

यह मुझे वहां भाग देता है, लेकिन यह सभी प्रोग्राम नामों की गिनती कर रहा है, अलग-अलग नहीं (जो मुझे उस क्वेरी में ऐसा करने की उम्मीद नहीं है)। मुझे लगता है कि मैं सिर्फ अपना सिर नहीं लपेट सकता कि यह कैसे बताएं कि उन्हें चुनने के बिना केवल अलग-अलग प्रोग्राम के नाम गिना जाए। या कुछ और।

जवाबों:


729

प्रोग्राम प्रकार और पुश नंबर द्वारा सभी DISTINCT प्रोग्राम नामों की गणना करें

SELECT COUNT(DISTINCT program_name) AS Count,
  program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type

DISTINCT COUNT(*)प्रत्येक अद्वितीय गणना के लिए एक पंक्ति लौटाएगा। आप जो चाहते हैं वह है COUNT(DISTINCT <expression>): एक समूह में प्रत्येक पंक्ति के लिए अभिव्यक्ति का मूल्यांकन करता है और अद्वितीय, गैर-शून्य मानों की संख्या लौटाता है।


110

मुझे प्रत्येक विशिष्ट मूल्य की घटनाओं की संख्या प्राप्त करने की आवश्यकता थी। कॉलम में क्षेत्र की जानकारी है। मैंने जिस सरल SQL क्वेरी को समाप्त किया, वह थी:

SELECT Region, count(*)
FROM item
WHERE Region is not null
GROUP BY Region

जो मुझे एक सूची देगा जैसे, कहो:

Region, count
Denmark, 4
Sweden, 1
USA, 10

हे @ Netsi1964 उसी क्वेरी का उपयोग किया जाता है, लेकिन मुझे क्षेत्र, राज्य, गणना चाहिए, यह संभव हो सकता है? कृपया मेरी मदद करें

47

आपको अलग-अलग स्तंभों के लिए एक व्युत्पन्न तालिका बनानी होगी और फिर उस तालिका से गणना की जाएगी:

SELECT COUNT(*) 
FROM (SELECT DISTINCT column1,column2
      FROM  tablename  
      WHERE condition ) as dt

यहाँ dtएक व्युत्पन्न तालिका है।


1
धन्यवाद! मैंने बहुत सारे डेटाबेस में अपने जीवन में बहुत सारे एसक्यूएल का उपयोग किया है, और यह पहली बार है जब मुझे इसे "एक्स" के रूप में एक अस्थायी तालिका के रूप में अर्हता प्राप्त करनी पड़ी।
मम्म

6
ध्यान दें कि यहां "dt" के लिए सामान्य शब्दावली व्युत्पन्न तालिका है, न कि अस्थायी तालिका
8forty

17
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type

15

इसे इस्तेमाल करे:

SELECT
    COUNT(program_name) AS [Count],program_type AS [Type]
    FROM (SELECT DISTINCT program_name,program_type
              FROM cm_production 
              WHERE push_number=@push_number
         ) dt
    GROUP BY program_type

-1

यह एक अच्छा उदाहरण है जहां आप पिनकोड की गिनती प्राप्त करना चाहते हैं जो पते के क्षेत्र के अंतिम में संग्रहीत है

SELECT DISTINCT
    RIGHT (address, 6),
    count(*) AS count
FROM
    datafile
WHERE
    address IS NOT NULL
GROUP BY
    RIGHT (address, 6)

-6
select  count (distinct NumTar),'PROPIAS'
from ATM_TRANe with (nolock)
where Fecha>='2014-01-01'
  AND Fecha<='2015-05-31'and NetDestino=0
  and SystemCodResp=0
group by NetDestino 
union 
select sum (contar),'FORANEAS'
from  
(
  select  count(distinct NumTar) as contar
  from ATM_TRANe with (nolock)
  where Fecha>='2014-01-01'
    AND Fecha<='2014-01-31'
    and NetDestino!=0
    and SystemCodResp=0
  group by NetDestino
)dt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.