我有一个查询,它将数据放入临时表中,字段为:
nRating INT
agentId INT
agent VARCHAR(50)
评级值可以是0表示“不”,或者1表示“是”'。在不使用临时表的情况下,计算每个代理的无评级百分比和百分比的最佳方法是什么?
我们正在使用MSSQL 2014。
答案 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。