2011-09-07 16 views
7

se refieren a esta pregunta: ¿Obtener contar por ciento de un registro en una sola consulta

Get count of items and their values in one column

cómo puedo conseguir por ciento del total de registros en la misma consulta como esta:

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

gracias

+0

Algo así como la solución en este [post SO] (http://stackoverflow.com/questions/770579/how-to-calculate-percentage-with-a-sql-statement) debería ayudarlo a calcular el porcentaje. – JW8

Respuesta

12

COUNT(*) OVER() le da la cuenta total.

Editar Pero en realidad necesita SUM(COUNT(MyTbl.ItemID)) OVER() ya que está sumando los valores en esa columna.

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 Acabo de aprender algo nuevo. –

+1

+1 Nunca había visto ese truco antes de – 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

No se permiten respuestas de todos los códigos. –

Cuestiones relacionadas