2013-06-18 22 views
6

Ho la seguente query:Calcolare gruppo percentuale di 2 cifre decimali - 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 

E visualizzato il seguente output:

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

Come ho arrotondare a solo 1 decimale? (Cioè 26.7% & 73,3%)

risposta

4

Una scelta migliore per la conversione è la funzione str(). (Documentato here.)

Inoltre, è possibile eseguire il calcolo utilizzando le funzioni della finestra (presupponendo che si stia utilizzando SQL Server 2005 o più recente). Qui è la mia versione della query:

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

Volontà che funziona anche in PostgreSQL? – 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

provare qualcosa di simile:

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