列中出现的百分比

时间:2016-05-22 02:06:17

标签: sql sql-server-2012

看着,但只找到了没有好答案的投票问题。

我试图在SQL Server中查找出现的百分比。我正在做的简化版本:

 ID    NAME   FAVORITE_COLOR
------------------------------------
  1    Jim        Blue
  2    Tom        Green
  3    Rob        Yellow
  4    Kev        Blue
  5    Kim        Green
  6    Bev        Blue

我可以算出每个中有多少,这很容易。

SELECT 
    favorite_color, COUNT(favorite_color) AS totals 
FROM 
    color_prefs 
GROUP BY 
    favorite_color

那告诉我3个人喜欢蓝色(等)。我无法弄清楚如何做到就是获得百分比。我想知道50%的人喜欢蓝色。我尝试了下面的内容,但SQL完全讨厌它:

SELECT 
    favorite_color, 
    COUNT(favorite_color) / SUM(COUNT(favorite_color)) AS color_percent 
FROM 
    color_prefs 
GROUP BY 
    favorite_color

我收到错误:

  

无法对包含聚合或子查询的表达式执行聚合函数。

显然,我可以让PHP为我解决这个问题,但是我必须在没有子查询的SQL中做到这一点,对吗?

2 个答案:

答案 0 :(得分:2)

使用窗口功能:

Select color, count(*),
       Count(*) * 1.0 / sum(count(*)) over ()
From color_prefs
Group by color;

答案 1 :(得分:2)

你可以用两种方式做到这一点。第一种方式效率不高,但如果你的表不包含很多行,那么应该没问题。

select favorite_color,count(favorite_color)*100/(select count(*) from a)
from color_prefs
group by favorite_color

这是第二种方式,效率更高..

select favorite_color,count(favorite_color)*100/sum(count(*)) over()
from color_prefs
group by favorite_color

检查sqlfiddle