KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
Contests Table :
Colleges Table :
Challenges Table :
View_Stats Table :
Submission_Stats Table :
문제
Samantha는 여러 대학의 후보자들을 대상으로
코딩 챌린지와 콘테스트를 통해 인터뷰를 진행한다.
각 콘테스트에 대해
contest_id
,hacker_id
,name
,total_submissions
,total_accepted_submissions
,total_views
,total_unique_views
의
합계를 출력하는 쿼리 작성하기 /
각 콘테스트는 contest_id로 정렬,
네 가지 합계가 모두 0인 콘테스트는 결과에서 제외
✔️ 제출 쿼리
✔️ 쿼리 분석
SELECT c.contest_id
, c.hacker_id
, c.name
, IFNULL(SUM(agg_s.total_submissions), 0) total_submissions
, IFNULL(SUM(agg_s.total_accepted_submissions), 0) total_accepted_submissions
, IFNULL(SUM(agg_vs.total_views), 0) total_views
, IFNULL(SUM(agg_vs.total_unique_views), 0) total_unique_views
# 각 콘테스트 필요 데이터 조회
FROM contests c
# Contests 테이블 기준
INNER JOIN colleges cl ON c.contest_id = cl.contest_id
# Colleges 테이블과 조인, 각 콘테스트와 대학 찾기
INNER JOIN challenges ch ON cl.college_id = ch.college_id
# Challenges 테이블과 조인, 각 대학의 챌린지 찾기
LEFT JOIN (
SELECT challenge_id
, SUM(total_submissions) total_submissions
, SUM(total_accepted_submissions) total_accepted_submissions
FROM submission_stats
GROUP BY challenge_id
) agg_s ON ch.challenge_id = agg_s.challenge_id
# Submission_Stats 테이블에서 집계 후 조인
LEFT JOIN (
SELECT challenge_id
, SUM(total_views) total_views
, SUM(total_unique_views) total_unique_views
FROM view_stats
GROUP BY challenge_id
) agg_vs ON ch.challenge_id = agg_vs.challenge_id
# View_Stats 테이블에서 집계 후 조인
GROUP BY c.contest_id, c.hacker_id, c.name
# 콘테스트, 해커, 이름 별로 그룹화
HAVING total_submissions > 0
OR total_accepted_submissions > 0
OR total_views > 0
OR total_unique_views > 0
# 네 가지 통계의 합계가 모두 0이 아닌 경우만 조회
ORDER BY c.contest_id
# contest_id 기준 정렬
1. 조건부 조인
INNER JOIN colleges cl ON c.contest_id = cl.contest_id
# Colleges 테이블과 조인, 각 콘테스트가 어느 대학에서 사용되었는지 찾기
INNER JOIN challenges ch ON cl.college_id = ch.college_id
# Challenges 테이블과 조인, 각 대학의 챌린지 찾기
2. 그룹화 및 중복 제거
GROUP BY c.contest_id, c.hacker_id, c.name
# 콘테스트, 해커, 이름 별로 그룹화하여 중복 제거
3. 필터링
HAVING total_submissions > 0
OR total_accepted_submissions > 0
OR total_views > 0
OR total_unique_views > 0
# 네 가지 통계의 합계가 모두 0이 아닌 경우만 조회
4. 정렬
ORDER BY c.contest_id
# contest_id로 결과 정렬