在SQL Server中使用GROUP BY子句时,根据总行数获取行百分比

时间:2016-02-14 11:29:16

标签: sql sql-server database sql-server-2008

使用此SQL查询:

Select CityName, count(UserID) as UserCount 
from tblUsers 
group by CityName

我得到了这些结果:

CityName    UserCount
---------------------
City 1      10
City 2      15

预期产出:

CityName    UserCount  Perc
---------------------------
City 1      10         40
City 2      15         60

根据上述数据集,我想根据1列中值的总和得到行的%分布。请指教。

3 个答案:

答案 0 :(得分:1)

尝试使用子查询来选择总计数,如下所示:

Select CityName,
       count(userID) as userCount,
       count(UserID)/(select count(*) from tblUsers)*100 as Perc
from tblUsers
group by CityName

您也可以尝试JOIN:

SELECT t.CityName,
       t.userCount,
       t.userCount/s.totalCount*100 as Perc
FROM (Select CityName, count(UserID) as UserCount 
      from tblUsers 
      group by CityName) t
INNER JOIN (SELECT count(*) as totalCount from tblUsers) s
ON(1=1)

答案 1 :(得分:0)

最简单的方法是使用窗口函数:

Select CityName, count(UserID) as UserCount ,
       count(UserId) * 100.0 / sum(count(UserId)) over () as Perc
from tblUsers 
group by CityName;

不需要子查询。

答案 2 :(得分:0)

不需要子查询/加入,只需使用组合总和

Select CityName,
       count(userID) as userCount,
       100 * count(UserID)/sum(count(UserID)) over () as Perc
from tblUsers
group by CityName

sum(count(UserID)) over ()返回所有计数的总和。

而不是count(UserID)您可以使用COUNT(*)