sql计算组的百分比

时间:2014-03-05 09:05:02

标签: sql sql-server sql-subselect

我试图得到这个

1.选择[result]!= Success

的所有行

2.count每个唯一[结果]

3.告诉我[结果]从[结果]中取出多少%

似乎前两个工作正常,但最后一列总是'0'

这是我的疑问:

SELECT  [result] , COUNT( * ) AS Total,(
                                             COUNT( * ) / 
                                             ( 
                                              SELECT COUNT( * ) 
                                              FROM[my_table] 
                                             ) 
                                         ) * 100 AS  '%' 

                                         FROM [my_table]
                                            WHERE  ([result]!='Success') 
                                            GROUP BY  [result] 

这是结果:

enter image description here

坦克你们!

3 个答案:

答案 0 :(得分:1)

您需要将数字转换为小数或浮点数,否则您将对整数进行操作。

SELECT  [result] , COUNT( * ) AS Total,
      (1.0 * COUNT( * ) / ( 
           SELECT COUNT( * ) 
           FROM[my_table] 
           ) 
      ) * 100 AS  '%' 
FROM [my_table]
WHERE  ([result]!='Success') 
GROUP BY  [result] 

答案 1 :(得分:0)

我会试试这个:

  select [result], count(1) over (partition by [result]), 
  (count(1) over (partition by [result]) * 100/count(*))
  FROM [my_table]
  WHERE  ([result]!='Success') 

我认为您的代码有效,我认为您需要在划分之前达到* 100,我认为您发现使用整数并且具有值< 1,所以它舍入到0。

答案 2 :(得分:0)

这应该这样做,只要第一个数字是浮点数,结果就是浮点数

  SELECT [result] 
  ,COUNT(*) AS Total
  ,CAST((COUNT(*)AS FLOAT) / (SELECT COUNT(*) FROM [my_table])) AS '%' 
  FROM [my_table]
  WHERE  ([result]!='Success') 
  GROUP BY  [result]