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

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

仅作学习,不作他用

题干

用户表: Users

Column NameType
user_namevarchar
user_idint

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%

答案

官方答案

暂无

其他有意思的答案

我的答案


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐子元竟然被占了!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值