2009-07-14 10 views
9

मैं निम्न क्वेरी, जो उत्पादों की कुल संख्या की तुलना एक निश्चित उत्पाद के प्रतिशत पता लगाने की कोशिश कर रहा है। आईई: [उत्पाद गणना]/[कुल उत्पाद] = प्रतिशतएसक्यूएल फूट डालो()

;WITH totalCount AS(
    SELECT 
     CAST(COUNT(id) as Integer)as totalCount 
    FROM TABLE_NAME 
) 
SELECT 
    ((CAST(COUNT(DISTINCT id) as Integer)/(SELECT * FROM totalCount))*100) as 'Percent' 
FROM TABLE_NAME 

हालांकि, प्रतिशत कॉलम हमेशा रिटर्न "0" जब तक वहाँ केवल एक रिकार्ड है। इसके अलावा, कुल गणना जोड़ने और क्वेरी में एक का चयन करने का कोई तरीका है?

असल में, आप दो गणना() फ़ील्ड कैसे विभाजित करते हैं?

उत्तर

9

पूर्णांक के अलावा एक संख्या के रूप में अपनी कुल गणना कास्ट करें (डेसिमल?) - गणित के दौर बंद हो जाते हैं।

+1

धन्यवाद, यह काम किया! यह हमेशा आपको सरल चीजें मिलती है। – Jefe

+2

सुनिश्चित करें कि आप उस कोड को टिप्पणी करते हैं। हो सकता है कि अगला डेवलपर उतना चालाक न हो जितना आप थे। –

+0

@ मैथ्यू: ग्रेट सुझाव! – n8wrl

2

कि नहीं चाहिए:

;WITH totalCount AS(
    SELECT 
     CAST(COUNT(id) as Integer)as totalCount 
    FROM TABLE_NAME 
) 
SELECT 
    ((CAST(COUNT(DISTINCT id) as Integer)*100/(SELECT count(*) FROM totalCount))) as 'Percent' 
FROM TABLE_NAME 

नोट COUNT का चयन करें (*)। साथ ही, आपको विभाजित करने से पहले गुणा करना चाहिए, अन्यथा आपको हमेशा शून्य

+0

से गुणा से गुणा मैं ऐसा नहीं सोचता की, का उपयोग करें, के रूप में TOTALCOUNT क्वेरी केवल एक पंक्ति रिटर्न इसलिए यदि आप COUNT (*) में जोड़ने यह 1 हमेशा वापस आ जाएगी, वास्तविक कुल के बजाय। हालांकि मदद :) – Jefe

+0

ठीक :-) के लिए धन्यवाद लेकिन 100 से गुणा निश्चित रूप से आपकी समस्या का समाधान होगा। –

5

दशमलव परिशुद्धता के साथ कुछ के रूप में कास्ट करें, इंटीजर नहीं। एक फ्लोट या असली।

select cast(distinctCount as real)/cast(totalCount as real) * 100.00 
    , distinctCount 
    , totalCount 
from (
select count(distinct id) as distinctCount 
    , count(id) as totalCount 
    from Table) as aggregatedTable 
+0

मुझे दिखा कैसे एक में दो प्रश्नों में शामिल होने के लिए धन्यवाद। – Jefe

+0

@ जेफ़: फिर +1 के बारे में कैसे? lol –

+1

उपयोग दशमलव एक गणित गणना में नाव या वास्तविक उपयोग कभी नहीं के रूप में वे अयथार्थ datatypes हैं और राउंडिंग त्रुटियों को पेश कर सकते हैं। – HLGEM

संबंधित मुद्दे