240805_TIL

J Lee·2024년 8월 5일
1

아무리 사소하더라도 배움이 없는 날은 없다.

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;
profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보