KATA#84

codataffee·2024년 7월 7일
0

CODEKATA

목록 보기
84/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Interviews

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 기준 정렬


✔️ CHECK POINT

  • SQL
    • 조건부 조인
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로 결과 정렬

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

0개의 댓글

관련 채용 정보