2009-07-14 43 views
9

Ürünün toplam sayısına göre belirli bir ürünün yüzdesini bulmaya çalışan aşağıdaki sorguyu kullanıyorum. IE: [Ürün Sayısı]/[Toplam Ürünler] = YüzdeSQL Divide by Two Count()

;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 

Bununla birlikte, yüzde sütunu her zaman döner "0" tek bir kayıt yoktur edilmiştir. Ayrıca, totalCount ve Select sorgusunu bir tanesine eklemenin bir yolu var mı?

Temel olarak, iki Count() alanını nasıl bölersiniz?

cevap

9

Toplam sayımı tamsayı (DECIMAL?) Dışında bir sayı olarak yayınlama - matematik turları kapalı.

+1

Teşekkürler, işe yaradı! Her zaman seni uyandıran basit şeyler. – Jefe

+2

Bu kodu gönderdiğinizden emin olun. Bir sonraki geliştirici, senin kadar akıllı olmayabilir. –

+0

@Matthew: BÜYÜK öneri! – n8wrl

2

o olmamalı:

;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 

Not SELECT COUNT (*). Ayrıca, bölmeden önce çoğalmalısınız, aksi halde her zaman sıfır olur

+0

Bunu düşünmüyorum, totalCount sorgusu sadece bir satır döndürdüğünden, COUNT (*) içine eklerseniz, her zaman 1 döndürecektir, gerçek toplam yerine. Yardım için teşekkürler :) – Jefe

+0

tamam :-) Ama 100 ile çarparak kesinlikle sorunu çözecektir. –

5

Tamsayı değil, ondalık kesirli bir şey olarak yayınlayın. Bir yüzgeç ya da gerçek.

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

İki sorgunun nasıl bir araya getirileceğini gösterdiğiniz için teşekkür ederiz. – Jefe

+0

@Jefe: Peki ya +1? lol –

+1

ondalık kullanım, gerçek zamanlı veri türleri olduklarından ve yuvarlama hatalarını ekleyebildiğinden, bir matematik hesaplamasında asla float veya reel kullanmayın. – HLGEM