力扣题目-1633.各赛事的用户注册率

力扣题目-1633.各赛事的用户注册率

仅作学习,不作他用

题干

用户表: Users

Column Name Type
user_name varchar
user_id int

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

注册表: Register

Column Name Type
contest_id int
user_id int

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

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

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

返回结果如下示例所示。

示例 1:

输入:
Users 表:

user_id user_name
6 Alice
2 Bob
7 Alex

Register 表:

contest_id user_id
215 6
209 2
208 2
210 6
208 6
209 7
209 6
215 7
208 7
210 2
207 2
210 7

输出:

contest_id percentage
208 100.0
209 100.0
210 100.0
215 66.67
207 33.33

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

答案

官方答案

暂无

其他有意思的答案

我的答案


2024年2月5日

第一次回答:第一次尝试是使用left join的方法进行解题,但是发现解不出来,主要问题是出现在人数的统计上;
然后就换个方法,根据结果用查询语句一次次修改查询的结果,当中减少了连表的操作。

SELECT
	r.contest_id,
	ROUND(( count( r.contest_id ) / ( SELECT count( users.user_id ) user_num FROM users ) * 100 ), 2 ) percentage 
FROM
	Register r 
GROUP BY
	r.contest_id 
ORDER BY
	percentage DESC,
	r.contest_id ASC

你可能感兴趣的:(练习题目,leetcode,mysql)