通过组合2个SQL聚合函数来计算百分比总计
问题描述:
我正在尝试计算'mktcoupons'中的重复次数并生成重复项的百分比,以便所有百分比的总和等于1。但是,我所有的百分比都是零。任何建议?谢谢。通过组合2个SQL聚合函数来计算百分比总计
select mktcoupons, count(*) as countof,
count(*)/(select count(*) from X) as percentage
from X
group by mktcoupons
结果是这样的:
mktcoupons countof percentage
1 2334909 0
2 2725208 0
3 224979 0
4 24987 0
5 2032 0
6 341 0
7 62 0
8 13 0
9 5 0
10 1 0
答
SQL Server会整数除法。您可以显式将值转换为带有小数点的数字。我经常乘以1.0:
select mktcoupons, count(*) as countof,
count(*)/(select 1.0*count(*) from X) as percentage
from X
group by mktcoupons;
也就是说,你不需要这个查询的子查询。您可以使用窗口函数来代替:
select mktcoupons, count(*) as countof,
count(*)/sum(1.0 * count(*)) over() as percentage
from X
group by mktcoupons;
当你有一个复杂的WHERE
条款或JOIN
是你们等会在子查询复制这是特别有帮助。
谢谢!你的两个查询都很好用!我仍然试图弄清楚为什么count(*)需要乘以1.0。 (来自X的Count(*))返回一个整数。将整数乘以1.0会使它更“整数”吗? – May 2015-03-02 14:14:58
@五月。 。 。 SQL Server对整数进行整数运算,所以3/2 = 1,而不是1.5。这会影响平均值和分割。乘以1.0(或更好的显式转换)将其转换为具有小数位的数字。 – 2015-03-02 14:31:13
@戈登......谢谢!现在我明白了为什么,我将计算百分比的查询部分更改为(1.0 * count(*))/(从X中选择count(*))并且它也起作用。所以看起来我可以将分母或分子乘以1.0以使这个技巧奏效! – May 2015-03-02 14:42:56