KATA#81

codataffee·2024년 7월 4일
0

CODEKATA

목록 보기
81/114
post-thumbnail

WHAT IS KATA?

KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.

이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.


- SQL


✔️ 문제 #1: Contest Leaderboard

Hackers Table :Submissions Table :

문제
각 해커의 각 도전 과제에서 얻은 최고 점수를 합산하여 총 점수를 계산하고,
이를 조건에 맞게 정렬하여 출력하는 쿼리 작성

조건 : 총 점수가 0인 해커는 제외, 점수가 같을 경우 hacker_id 오름차순 정렬

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT s.hacker_id,
       h.name,
       SUM(s.max_score) AS total_score
       # 외부 쿼리: 각 해커의 이름과 총 점수를 반환
FROM (
    SELECT s.hacker_id,
           s.challenge_id,
           MAX(s.score) AS max_score
    # 서브쿼리: 각 해커가 각 도전 과제에서 얻은 최고 점수 계산
    FROM Submissions s
    GROUP BY s.hacker_id, s.challenge_id
    # GROUP BY: 해커와 도전 과제별로 그룹화하여 각 그룹 내에서 최대 점수를 계산
) s
LEFT JOIN Hackers h ON s.hacker_id = h.hacker_id
# JOIN: 서브쿼리 결과를 Hackers 테이블과 결합
GROUP BY s.hacker_id, h.name
# GROUP BY: 해커별 그룹화 > 총 점수 계산
HAVING SUM(s.max_score) > 0
# HAVING: 총 점수가 0보다 큰 해커만 선택
ORDER BY total_score DESC, s.hacker_id
# ORDER BY: 총 점수 기준 내림차순 정렬, 동일 점수인 경우 해커 ID로 정렬


✔️ CHECK POINT

  • SQL
    • MySQL 8.0 버전 미만에서 WITH 문 사용이 안돼서 서브쿼리로 문제를 풀었지만,
      같은 문제를 WITH 문 활용한 CTE 생성으로 쿼리 작성 시도
WITH MaxScores AS (
    # CTE: 각 해커가 각 도전 과제에서 얻은 최고 점수 계산
    SELECT s.hacker_id,
           s.challenge_id,
           MAX(s.score) AS max_score
    FROM Submissions s
    GROUP BY s.hacker_id, s.challenge_id
    # GROUP BY: 해커와 도전 과제별로 그룹화하여 각 그룹 내에서 최대 점수 계산
	)
    
SELECT s.hacker_id,
       h.name,
       SUM(s.max_score) AS total_score
# 외부 쿼리: 각 해커의 이름과 총 점수 반환
FROM MaxScores s
LEFT JOIN Hackers h ON s.hacker_id = h.hacker_id
# JOIN: CTE(MaxScores)를 Hackers 테이블과 결합하여 해커 이름 가져오기
GROUP BY s.hacker_id, h.name
# GROUP BY: 해커별 그룹화하여 총 점수 계산
HAVING SUM(s.max_score) > 0
# HAVING: 총 점수가 0보다 큰 해커만 선택
ORDER BY total_score DESC, s.hacker_id
# ORDER BY: 총 점수 기준 내림차순 정렬, 동일 점수인 경우 해커 ID로 정렬

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보