Joh*_*ith 4 sql postgresql select case
我在板球数据库中有一个简单的表格,它记录了每个球员在一场比赛中的得分。这些字段是:球员的姓名,他们在特定比赛中的得分,无论他们在比赛结束时“出局”还是“未出局”。显然,玩家在表中出现的次数与他们参加过的比赛一样多
我想运行一个查询,为我提供每个玩家的平均“运行”。在板球中,这是通过将他们的总跑步次数除以他们“出局”的次数来完成的,我一直在尝试的代码是这样的:
SELECT name,
SUM(runs)/COUNT(CASE WHEN playerout = 'out' THEN name END)
FROM players
GROUP BY name;
Run Code Online (Sandbox Code Playgroud)
这样做的想法是,对于每个玩家,它会总结他们的运行并仅除以他们“出局”的次数,而忽略“出局”的次数。此代码不起作用,因为它仍然包括它们“notout”的时间,我尝试在其中添加“ELSE 0”,但由于混合了整数和字符数据类型,因此返回错误。
更新
该查询需要将玩家在每场比赛中的跑动相加,无论他们是否出局,然后除以他们出局的次数。例如,如果一名球员的比赛如下: 1. 10 次运行,出局 2. 20 次运行,出局 3. 30 次,未出局 他们的平均值将除以他们的总运行次数 (10+20+30) = 60,除以数量他们出局的次数 (2),因此他们的平均值为 30。
可能有一个我没有意识到的明显解决方案 - 有什么建议吗?!
如果您想报告所有玩家,而不管他们是否在任何比赛中出局,那么您需要定义他们从未出局的时间值。对于下面的示例,我使用了NULL. 这样做可以确保您不会得到零错误除法。
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15989 次 |
| 最近记录: |