TypechoJoeTheme

Toasobi的博客

sql的求比例问题

本文最后更新于2023年09月07日,已超过378天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
  • 先看例题

用户表: Users

Column NameType
user_idint
user_namevarchar

user_id 是该表的主键(具有唯一值的列)。
该表中的每行包括用户 ID 和用户名。

注册表: Register

Column NameType
contest_idint
user_idint

(contest_id, user_id) 是该表的主键(具有唯一值的列的组合)。
该表中的每行包含用户的 ID 和他们注册的赛事。

编写解决方案统计出各赛事的用户注册百分率,保留两位小数。

返回的结果表按 percentage 的 降序 排序,若相同则按 contest_id 的 升序 排序。

返回结果如下示例所示。

示例 1:

输入:

Users 表:
user_iduser_name
6Alice
2Bob
7Alex
Register 表:
contest_iduser_id
2156
2092
2082
2106
2086
2097
2096
2157
2087
2102
2072
2107
输出:
contest_idpercentage
208100.0
209100.0
210100.0
21566.67
20733.33

解释:
所有用户都注册了 208、209 和 210 赛事,因此这些赛事的注册率为 100% ,我们按 contest_id 的降序排序加入结果表中。
Alice 和 Alex 注册了 215 赛事,注册率为 ((2/3) * 100) = 66.67%
Bob 注册了 207 赛事,注册率为 ((1/3) * 100) = 33.33%

这道题的重点是灵活运用count求取比例,并且需要在select里面嵌套一个分母的select count,代码如下:
SELECT 
    contest_id
    ,round((count(DISTINCT user_id) * 100)/(SELECT count(*) FROM Users),2)percentage
FROM 
    Register
GROUP BY 
    contest_id
ORDER BY 
    percentage DESC
    ,contest_id ASC
朗读
赞(0)
评论 (0)