SQL 코드카타
문제 링크
dense_rank가 아니라 그냥 rank를 써서 순위를 구해야 한다.
그래야 나중에 본 쿼리에서 percentage를 구할 때
순위가 밀려서 값이 틀어지는 경우가 없음.
WITH a
AS (SELECT student_id,
department_id,
mark,
Rank()
OVER(
partition BY department_id
ORDER BY mark DESC) AS "rank1"
FROM students),
b
AS (SELECT department_id,
Count(DISTINCT student_id) AS "number_of_students"
FROM a
GROUP BY 1)
SELECT a.student_id,
a.department_id,
Round(Ifnull(100.0 * ( a.rank1 - 1 ) / ( b.number_of_students - 1 ), 0), 2) AS
"percentage"
FROM a
LEFT JOIN b
ON a.department_id = b.department_id;