2013-06-18 65 views
6

Tôi có truy vấn sau đây:Tính nhóm tỷ lệ phần trăm đến những nơi 2 chữ số thập phân - 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 

Và nhận được kết quả như sau:

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

Làm thế nào để tôi tròn đến chỉ có 1 vị trí thập phân? (ví dụ: 26,7% & 73,3%)

Trả lời

4

Lựa chọn tốt hơn cho chuyển đổi là hàm str(). (Tài liệu here.)

Ngoài ra, bạn có thể thực hiện phép tính bằng các chức năng cửa sổ (giả sử bạn đang sử dụng SQL Server 2005 trở lên). Đây là phiên bản của tôi về truy vấn:

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

Will mà cũng làm việc trong 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

Hãy thử một cái gì đó như thế này:

CAST(ROUND(100.0 * COUNT(*)/tot, 1) AS DECIMAL(10, 1)) 
Các vấn đề liên quan