2013-06-18 19 views
6

我有以下查詢:計算組比例爲2位小數 - 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 

而且收到以下輸出:

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

如何我四捨五入到只有1位小數? (即26.7%& 73.3%)

回答

4

用於轉換一個更好的選擇是str()功能。 (記錄here。)

此外,您可以使用窗口函數(假設您正在使用SQL Server 2005或更新)進行計算。這裏是我的版本的查詢:

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

威爾在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

嘗試這樣:

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