返回介绍

solution / 1600-1699 / 1633.Percentage of Users Attended a Contest / README

发布于 2024-06-17 01:03:16 字数 2538 浏览 0 评论 0 收藏 0

1633. 各赛事的用户注册率

English Version

题目描述

用户表: Users

+-------------+---------+
| Column Name | Type  |
+-------------+---------+
| user_id   | int   |
| user_name   | varchar |
+-------------+---------+
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%

解法

方法一:分组统计 + 子查询

我们可以将 Register 表按照 contest_id 分组,统计每个赛事的注册人数,每个赛事的注册人数除以总注册人数即为该赛事的注册率。

# Write your MySQL query statement below
SELECT
  contest_id,
  ROUND(COUNT(1) * 100 / (SELECT COUNT(1) FROM Users), 2) AS percentage
FROM Register
GROUP BY 1
ORDER BY 2 DESC, 1;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文