SQL return 最小按groupby和比率
SQL return minimum by groupby and ratio of
一个 SQL 问题:我有一个 table game
列 user_id
(每个用户唯一),game_id
(每个游戏唯一), game_start_timestamp_utc
(游戏开始时的 UTC 时间戳)和 game_status
,可以是“通过”、“进行中”或“失败”。
题目是写查询return通过率最低的游戏(通过users/enrolled个用户)。
table应该是这样的
user_id game_id game_start_timestamp_utc game_status
-----------------------------------------------------
1 111 10/22/2019 pass
2 111 10/21/2018 fail
...
我在Pythonpandas知道怎么做,只需要group by game_id
计算通过率,但在SQL没太多想法。提前致谢。
使用条件聚合。 avg()
派上用场:
select game_id,
avg(case when game_status = 'pass' then 1.0 else 0 end) as pass_rate
from game
group by game_id
order by pass_rate
这会为您提供每场比赛的通过率,作为 0 到 1 之间的值,按增加率排序 - 因此第一行是您想要的结果。
您只能使用 row-limiting 子句保留这一行。语法因数据库而异:limit 1
、top (1)
、fetch first row
、...
一个 SQL 问题:我有一个 table game
列 user_id
(每个用户唯一),game_id
(每个游戏唯一), game_start_timestamp_utc
(游戏开始时的 UTC 时间戳)和 game_status
,可以是“通过”、“进行中”或“失败”。
题目是写查询return通过率最低的游戏(通过users/enrolled个用户)。
table应该是这样的
user_id game_id game_start_timestamp_utc game_status
-----------------------------------------------------
1 111 10/22/2019 pass
2 111 10/21/2018 fail
...
我在Pythonpandas知道怎么做,只需要group by game_id
计算通过率,但在SQL没太多想法。提前致谢。
使用条件聚合。 avg()
派上用场:
select game_id,
avg(case when game_status = 'pass' then 1.0 else 0 end) as pass_rate
from game
group by game_id
order by pass_rate
这会为您提供每场比赛的通过率,作为 0 到 1 之间的值,按增加率排序 - 因此第一行是您想要的结果。
您只能使用 row-limiting 子句保留这一行。语法因数据库而异:limit 1
、top (1)
、fetch first row
、...