2011-09-07 27 views
7

tham khảo cho câu hỏi này:Nhận đếm phần trăm của một kỷ lục trong một truy vấn đơn

Get count of items and their values in one column

làm thế nào tôi có thể nhận được phần trăm của số kỷ lục trong truy vấn duy nhất như thế này:

ItemId  count   Percent 
------------------------------------ 
    1   2    33.3 
    2   0    0 
    3   1    16.6 
    4   3    50.0    

nhờ

+0

Cái gì đó như là giải pháp trong này [SO bài] (http://stackoverflow.com/questions/770579/how-to-calculate-percentage-with-a-sql-statement) sẽ giúp bạn tính toán tỷ lệ phần trăm. – JW8

Trả lời

12

COUNT(*) OVER() cung cấp cho bạn tổng số.

Chỉnh sửa Nhưng thực tế bạn cần SUM(COUNT(MyTbl.ItemID)) OVER() khi bạn đang tổng hợp các giá trị trong cột đó.

SELECT Items.ItemID, 
     [count] = COUNT(MyTbl.ItemID), 
     [Percent] = 100.0 * COUNT(MyTbl.ItemID)/SUM(COUNT(MyTbl.ItemID)) OVER() 
FROM (VALUES (1,'N1'), 
       (2,'N2'), 
       (3,'N4'), 
       (4,'N5')) Items(ItemID, ItemName) 
     LEFT JOIN (VALUES(1), 
         (1), 
         (3), 
         (4), 
         (4), 
         (4)) MyTbl(ItemID) 
     ON (MyTbl.ItemID = Items.ItemID) 
GROUP BY Items.ItemID 
ORDER BY Items.ItemID 
+1

+1 Tôi vừa học được điều gì đó mới mẻ. –

+1

+1 Tôi chưa bao giờ thấy mẹo đó trước – Lamak

3
select 
    ItemId, 
    count(*) as count, 
    cast(count(*) as decimal)/(select count(*) from myTable) as Percent 
from myTable 
group by ItemId 
2
SELECT a.itemid 
     , count(a.itemid) as [count] 
     , ((cast(count(a.itemid) as decimal)/t.total) * 100) as percentage 
FROM table1 as a 
INNER JOIN (SELECT count(*) as total FROM table1) as t ON (1=1) 
GROUP BY a.item_id, t.total 
ORDER BY a.item_id 
0
SELECT a.itemid, 
    count(a,itemid) as [count], 
    100.00 * (count(a.itemid)/(Select sum(count(*) FROM myTable)) as [Percentage] 
FROM myTable 
    Group by a.itemid 
    Order by a.itemid 
+0

Tất cả các câu trả lời mã đều không được phép trả lời. –

Các vấn đề liên quan