KATA#77

codataffee·2024년 6월 30일
0

CODEKATA

목록 보기
77/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Top Competitors

HACKERS TABLE :DIFFICULTY TABLE :CHALLENGE TABLE :SUBMISSION TABLE :

문제
해커가 도전 과제에서 만점을 받은 경우,
해당 해커의 ID와 이름을 출력하는 쿼리 작성, 정렬 조건에 따라 정렬

  1. 만점 도전 과제 수에 따라 내림차순 정렬
  2. 만점 도전과제 수가 같은 경우, 해커 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

쿼리 작동 세부 내용 정리

  1. SELECT 절
# 해커 ID와 이름 반환
SELECT H.HACKER_ID, 
       H.NAME :

HACKERS 테이블의 해커 ID와 이름 반환
  1. 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 테이블 조인
  1. WHERE 절
# 획득 점수가 해당 난이도의 만점인 경우 필터링
WHERE S.SCORE = D.SCORE :
획득 점수가 해당 난이도의 만점과 동일한 경우만 선택
  1. GROUP BY 절
# 해커별 그룹화
GROUP BY H.HACKER_ID, H.NAME :
해커 ID와 이름 기준으로 그룹화
  1. HAVING 절
# 만점을 받은 도전 과제가 1개 이상인 해커만 선택
HAVING COUNT(S.CHALLENGE_ID) >= 1 :
만점 도전 과제 수가 1 이상인 해커만 선택
  1. ORDER BY 절
# 결과 정렬
ORDER BY COUNT(S.CHALLENGE_ID) DESC,
         H.HACKER_ID :

만점 도전 과제 수 기준 내림차순 정렬,
만점 도전 과제 수가 같은 경우 해커 ID 기준 오름차순 정렬

✔️ CHECK POINT

  • SQL
    연속 조인 :

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 테이블 조인

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

0개의 댓글

관련 채용 정보