2013-06-18 48 views
6

Ben aşağıdaki sorgu:hesaplayın grup yüzdesi - SQL

SELECT hostVersion, CONVERT(varchar, 100.0 * count(*)/tot,1) + '%' as 'Percent' 
FROM hostInfo, 
(SELECT COUNT(*) as tot FROM hostInfo) x 
GROUP BY hostVersion, tot 

Ve aşağıdaki çıktıyı alırsınız:

+--------------------------------+ 
| hostVersion | Percent   | 
+--------------------------------+ 
| 5.0.0 | 26.666666666666% | 
+--------------------------------+ 
| 5.1.0 | 73.333333333333% | 
+--------------------------------+ 

nasıl sadece 1 ondalık basamağa yuvarlamak için? (Yani% 26,7 &% 73.3)

cevap

4

dönüşüm için daha iyi bir seçim str() fonksiyonudur. (Belgelenen here.)

Ayrıca, hesaplamalarınızı pencere işlevlerini kullanarak da yapabilirsiniz (SQL Server 2005 veya daha yeni bir sürümü kullandığınızı varsayarak). Böyle

select hi.hostVersion, 
     str(((100.0*count(*))/sum(count(*)) over()), 5, 2)+'%' 
from hostInfo hi 
group by hi.hostVersion 
+0

Will da PostgreSQL çalışmak sorgusuna benim sürümüdür? – Padagomez

0
SELECT hostVersion, CONVERT(varchar, ROUND(100.0 * count(*)/tot,2),1) + '%' as 'Percent' 
FROM hostInfo, 
(SELECT COUNT(*) as tot FROM hostInfo) x 
GROUP BY hostVersion, tot 
4

deneyin şey:

CAST(ROUND(100.0 * COUNT(*)/tot, 1) AS DECIMAL(10, 1))