KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
HACKERS TABLE :
DIFFICULTY TABLE :
CHALLENGE TABLE :
SUBMISSION TABLE :
문제
해커가 도전 과제에서 만점을 받은 경우,
해당 해커의 ID와 이름을 출력하는 쿼리 작성, 정렬 조건에 따라 정렬
✔️ 제출 쿼리
✔️ 쿼리 분석
SELECT H.HACKER_ID,
H.NAME
FROM HACKERS H JOIN SUBMISSIONS S
ON H.HACKER_ID = S.HACKER_ID
JOIN CHALLENGES C
ON S.CHALLENGE_ID = C.CHALLENGE_ID
JOIN DIFFICULTY D
ON C.DIFFICULTY_LEVEL = D.DIFFICULTY_LEVEL
WHERE S.SCORE = D.SCORE
GROUP BY H.HACKER_ID, H.NAME
HAVING COUNT(S.CHALLENGE_ID) >= 1
ORDER BY COUNT(S.CHALLENGE_ID) DESC,
H.HACKER_ID
쿼리 작동 세부 내용 정리
# 해커 ID와 이름 반환
SELECT H.HACKER_ID,
H.NAME :
HACKERS 테이블의 해커 ID와 이름 반환
# HACKERS, SUBMISSIONS, CHALLENGES, DIFFICULTY 연속 조인
FROM HACKERS H JOIN SUBMISSIONS S
ON H.HACKER_ID = S.HACKER_ID :
해커 ID 기준으로 HACKERS 테이블과 SUBMISSIONS 테이블 조인
JOIN CHALLENGES C
ON S.CHALLENGE_ID = C.CHALLENGE_ID :
CHALLENGE_ID 기준으로 SUBMISSIONS 테이블과 CHALLENGES 테이블 조인
JOIN DIFFICULTY D
ON C.DIFFICULTY_LEVEL = D.DIFFICULTY_LEVEL :
DIFFICULTY_LEVEL 기준으로 CHALLENGES 테이블과 DIFFICULTY 테이블 조인
# 획득 점수가 해당 난이도의 만점인 경우 필터링
WHERE S.SCORE = D.SCORE :
획득 점수가 해당 난이도의 만점과 동일한 경우만 선택
# 해커별 그룹화
GROUP BY H.HACKER_ID, H.NAME :
해커 ID와 이름 기준으로 그룹화
# 만점을 받은 도전 과제가 1개 이상인 해커만 선택
HAVING COUNT(S.CHALLENGE_ID) >= 1 :
만점 도전 과제 수가 1 이상인 해커만 선택
# 결과 정렬
ORDER BY COUNT(S.CHALLENGE_ID) DESC,
H.HACKER_ID :
만점 도전 과제 수 기준 내림차순 정렬,
만점 도전 과제 수가 같은 경우 해커 ID 기준 오름차순 정렬
JOIN 절
# HACKERS, SUBMISSIONS, CHALLENGES, DIFFICULTY 연속 조인
FROM HACKERS H JOIN SUBMISSIONS S
ON H.HACKER_ID = S.HACKER_ID :
해커 ID 기준으로 HACKERS 테이블과 SUBMISSIONS 테이블 조인
JOIN CHALLENGES C
ON S.CHALLENGE_ID = C.CHALLENGE_ID :
CHALLENGE_ID 기준으로 SUBMISSIONS 테이블과 CHALLENGES 테이블 조인
JOIN DIFFICULTY D
ON C.DIFFICULTY_LEVEL = D.DIFFICULTY_LEVEL :
DIFFICULTY_LEVEL 기준으로 CHALLENGES 테이블과 DIFFICULTY 테이블 조인