08/20 SQL 문제풀이 - 3246. Premier League Table Ranking (Leetcode)

Data Architect / Engineer·2024년 8월 20일
1

1일_1SQL

목록 보기
63/63
post-thumbnail

문제

  • LeetCode SQL 문제
  • 3246. Premier League Table Ranking / Easy
  • 문제 내용 : [링크]

내가 작성한 Query

SELECT TEAM_ID
    , TEAM_NAME
    , SUM(WINS*3 + DRAWS*1 + LOSSES*0) AS POINTS
    , RANK() OVER(ORDER BY SUM(WINS*3 + DRAWS*1 + LOSSES*0) DESC) AS POSITION
FROM TEAMSTATS
GROUP BY TEAM_NAME
ORDER BY POINTS DESC, TEAM_NAME ASC
  • TEAMSTATS 테이블에서 TEAM_ID, 문제에 조건에 따라 승리한 경우 3점, 비긴 경우 1점, 진 경우 0점을 반영한 팀별 점수 합계(POINTS)를 구해준다.

  • RANK()함수를 사용하여 위에서 구한 점수별로 등수를 구해준다.(OVER()안에 ORDER BY로 구현)

  • 이 때, 동점 팀은 같은 등수를 가져야 하므로 RANK() 함수를 사용하고, 동점인 팀의 수 만큼 다음 등수에 영향을 준다.
    (예를 들어, 1등 동점 팀이 두 팀인 경우, 1등/1등/3등 으로 처리)

  • cf) 만약 위에서 동점자 처리를 동점인 팀의 수 만큼 영향을 받지 않고 1등/1등/2등으로 처리한다면 DENSE_RANK() 함수를 사용한다.

  • 팀별 집계 정보를 추출하므로 team_name 기준으로 GROUP BY를 한다.

  • POINTS가 동점인 경우 정렬을 team_name 기준으로 오름차순 정렬해준다.


profile
질문은 계속돼 아오에

0개의 댓글