題目:
用戶表: 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 和他們注冊的賽事讲竿。
寫一條 SQL 語句赏表,查詢各賽事的用戶注冊百分率搔课,保留兩位小數(shù)沃测。
返回的結果表按 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%
mysql:
SELECT
r.contest_id,
ROUND(COUNT(r.user_id)/(SELECT COUNT(*) FROM Users) * 100,2) as percentage
FROM
Users AS u
RIGHT JOIN
Register AS r
ON
u.user_id = r.user_id
GROUP BY
r.contest_id
ORDER BY
percentage DESC,
contest_id ASC