返回介绍

solution / 2300-2399 / 2346.Compute the Rank as a Percentage / README

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

2346. 以百分比计算排名

English Version

题目描述

表: Students

+---------------+------+
| Column Name   | Type |
+---------------+------+
| student_id  | int  |
| department_id | int  |
| mark      | int  |
+---------------+------+
student_id 包含唯一值。
该表的每一行都表示一个学生的 ID,该学生就读的院系 ID,以及他们的考试分数。

 

编写一个解决方案,以百分比的形式报告每个学生在其部门的排名,其中排名的百分比使用以下公式计算:

(student_rank_in_the_department - 1) * 100 / (the_number_of_students_in_the_department - 1)。 percentage 应该 四舍五入到小数点后两位。 

student_rank_in_the_department 由 mark 的降序决定,mark 最高的学生是  rank 1。如果两个学生得到相同的分数,他们也会得到相同的排名。

任意顺序 返回结果表。

结果格式如下所示。

 

示例 1:

输入: 
Students 表:
+------------+---------------+------+
| student_id | department_id | mark |
+------------+---------------+------+
| 2      | 2       | 650  |
| 8      | 2       | 650  |
| 7      | 1       | 920  |
| 1      | 1       | 610  |
| 3      | 1       | 530  |
+------------+---------------+------+
输出: 
+------------+---------------+------------+
| student_id | department_id | percentage |
+------------+---------------+------------+
| 7      | 1       | 0.0    |
| 1      | 1       | 50.0     |
| 3      | 1       | 100.0    |
| 2      | 2       | 0.0    |
| 8      | 2       | 0.0    |
+------------+---------------+------------+
解释: 
对于院系 1:
 - 学生 7:percentage = (1 - 1)* 100 / (3 - 1) = 0.0
 - 学生 1:percentage = (2 - 1)* 100 / (3 - 1) = 50.0
 - 学生 3:percentage = (3 - 1)* 100 / (3 - 1) = 100.0
对于院系 2:
 - 学生 2: percentage = (1 - 1) * 100 / (2 - 1) = 0.0
 - 学生 8: percentage = (1 - 1) * 100 / (2 - 1) = 0.0

解法

方法一:窗口函数

注意空值判断。

# Write your MySQL query statement below
SELECT
  student_id,
  department_id,
  IFNULL(
    ROUND(
      (
        RANK() OVER (
          PARTITION BY department_id
          ORDER BY mark DESC
        ) - 1
      ) * 100 / (COUNT(1) OVER (PARTITION BY department_id) - 1),
      2
    ),
    0
  ) AS percentage
FROM Students;

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

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

发布评论

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