如何计算列中值的出现百分比?

时间:2014-11-24 17:01:32

标签: sql sql-server percentage

我有一个查询,它将数据放入临时表中,字段为:

nRating INT
agentId INT
agent VARCHAR(50)

评级值可以是0表示“不”,或者1表示“是”'。在不使用临时表的情况下,计算每个代理的无评级百分比和百分比的最佳方法是什么?

我们正在使用MSSQL 2014。

3 个答案:

答案 0 :(得分:1)

我会使用avg()。在一些数据库中:

select agentId, avg(rating) as yes_ratio, avg(1 - rating) as no_ratio
from temptable t
group by agentid;

某些数据库执行整数运算(特别是SQL Server),因此您需要非整数数字。我经常这样做乘以1.0:

select agentId, avg(rating*1.0) as yes_ratio, avg(1.0 - rating) as no_ratio
from temptable t
group by agentid;

您也可以通过执行cast(rating as float)来完成此操作。

答案 1 :(得分:0)

SELECT
    AgentId, 
    Agent,
    SUM(CASE WHEN B = 0 THEN 1.00 ELSE 0.00 END) / COUNT(*) AS NEG, 
    SUM(CASE WHEN B = 1 THEN 1.00 ELSE 0.00 END) / COUNT(*)  AS POS
FROM
    YOURTABLE
GROUP BY
    AgentId, 
    Agent

答案 2 :(得分:0)

好吧,想想你通常如何计算一个百分比。您将获取它发生的次数,超过记录总数,并乘以100。

所以,它看起来像这样:

SELECT (SUM(nRating) * 100 / COUNT(*)) AS percentageOfYesRatings
FROM agentTable
GROUP BY agentId;

附注

这里要特别注意的是,SUM()只能在这里工作,因为nRating将是1.你真正做的是获得等级为1的次数。重要的是要在将来记住这一点,因为如果你做了这个例子,评级可能在0到5之间,并且你想获得正评级的百分比,那么查询看起来会有所不同。

事实上,它可能看起来像这样,这是你需要做的,以获得没有评级的百分比:

SELECT (SUM(CASE WHEN nRating = 0 THEN 1 ELSE 0 END) * 100 / COUNT(*)) AS percentageOfNoRatings
FROM agentTable
GROUP BY agentId;

而是计算0等级的出现次数。要做到这两点,您只需组合查询即可。这是SQL Fiddle