我在板球数据库中有一个简单的表格,用于记录'运行'每个玩家在游戏中得分。这些字段包括:玩家的名字,他们在特定游戏中得分的分数,以及他们是否排除了#39; out' out' out'或者'没有出去'在比赛结束时。显然,玩家在桌面上出现的次数与他们玩过的比赛次数相同
我想运行一个查询,让我得到平均值'运行'每位玩家。在板球比赛中,这是通过他们的总跑步和仅除以他们的出场次数来完成的,我一直尝试的代码是这样的:
SELECT name,
SUM(runs)/COUNT(CASE WHEN playerout = 'out' THEN name END)
FROM players
GROUP BY name;
这样的想法是,对于每个玩家来说,它总结他们的跑步并且只按他们出去的次数来划分,而忽略了“不要”。这段代码不起作用,因为它仍然包括它们的时间' notout'我试过添加' ELSE 0' in但由于混合了整数和字符数据类型而返回错误。
更新
查询需要在每个游戏中添加玩家的游戏,无论他们是否完成,然后除以他们外出的次数。例如,如果一个玩家匹配如下: 1.运行10次 2.运行20次 3. 30次运行,没有出局 他们的平均值是以他们的总跑数(10 + 20 + 30)= 60除以他们出去的次数(2),所以他们的平均值是30。
可能有一个明显的解决方案,我还没有意识到 - 有任何建议吗?!
答案 0 :(得分:1)
如果您想报告所有玩家,无论他们是否在任何比赛中出局,那么您需要为他们从未离开的时间定义一个值。对于下面的示例,我使用了NULL
。这样做可以确保您不会收到division by zero错误。
SELECT
name,
CASE WHEN SUM(CASE WHEN playerout = 'out' THEN 1 ELSE 0 END) = 0
THEN NULL
ELSE
SUM(runs)
/SUM(CASE WHEN playerout = 'out' THEN 1 ELSE 0 END)
END AS runs_divided_by_dismissals
FROM players
GROUP BY name;
答案 1 :(得分:0)
您可以使用
SUM(CASE WHEN playerout = 'out' THEN 1 ELSE 0 END)