KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
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로 정렬
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로 정렬