KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
#CTEs 테이블 만들어서 조합하는게 좀 재밌어지는중 :)
BOOK 테이블과 AUTHOR 테이블을 조인해서 필요한 칼럼들만 추출한 BKAR 테이블을 만들어놓고,
남은 SALES 테이블과 조인하여 조건과 그룹화 후 원하는 결과 출력하기
#총매출액 계산에서 오답을 냈는데..
각 그룹별 판매량 * 판매가격을 먼저 구한 후,
그 값들의 합을 추출해야 총매출액이 나온다는 것이 헷갈렸었다.
WITH BKAR AS (
SELECT A.AUTHOR_ID AI,
A.AUTHOR_NAME AN,
B.CATEGORY BC,
B.PRICE BP,
B.BOOK_ID BI
FROM BOOK B INNER JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
)
SELECT BKAR.AI AUTHOR_ID,
BKAR.AN AUTHOR_NAME,
BKAR.BC CATEGORY,
SUM(S.SALES * BKAR.BP) TOTAL_SALES
FROM BKAR INNER JOIN BOOK_SALES S
ON BKAR.BI = S.BOOK_ID
WHERE S.SALES_DATE LIKE '2022-01%'
GROUP BY 1,3
ORDER BY 1,3 DESC
✔️ 제출 쿼리
✔️ 쿼리 분석
# 이 문제도 역시 CTEs 테이블 활용.
대여 기록 정보 테이블에서 대여 시작일이 8월에서 10월 사이인 데이터들을
CAR_ID 기준으로 그룹화하고, 그룹 내 행이 5개 이상인 것만 조회하는 RECORD 테이블 생성,
# 원래 대여 기록 정보 테이블에서 대여 시작일 조건을 동일하게 정해주고,
RECORD 테이블 내 CAR_ID와 동일한 CAR_ID 행들만 불러온 뒤
CAR_ID와 MONTH 기준으로 그룹화하여 원하는 칼럼들 추출!
WITH RECORD AS
(
SELECT CAR_ID CI,
COUNT(CAR_ID) CNT
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) BETWEEN 8 AND 10
GROUP BY CAR_ID
HAVING COUNT(CAR_ID) >= 5
)
SELECT MONTH(START_DATE) MONTH,
CAR_ID,
COUNT(CAR_ID) RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) BETWEEN 8 AND 10
AND CAR_ID IN (SELECT R.CI
FROM RECORD R)
GROUP BY CAR_ID, MONTH(START_DATE)
HAVING COUNT(CAR_ID) != 0
ORDER BY MONTH, CAR_ID DESC
✔️ 제출 쿼리
✔️ 쿼리 분석
# 역시 CTEs 테이블 생성.
문제에서 리뷰를 가장 많이 작성한 회원의 리뷰들을 조회하라고 했기 때문에
리뷰를 가장 많이 작성한 회원을 골라내는 테이블 A를 생성하고,
# MEMBER_PROFILE 테이블과 REST_REVIEW 테이블을 조인하여 전체 테이블을 만들어 준 뒤,
MEMBER_ID 가 A 테이블의 MEMBER_ID 와 동일한 데이터만 추출하여
원하는 조건으로 조회!
WITH A AS (
SELECT MEMBER_ID MI,
COUNT(*) CNT
FROM REST_REVIEW
GROUP BY MEMBER_ID
ORDER BY 2 DESC
LIMIT 1
)
SELECT M.MEMBER_NAME,
R.REVIEW_TEXT,
DATE_FORMAT(R.REVIEW_DATE, '%Y-%m-%d') REVIEW_DATE
FROM MEMBER_PROFILE M INNER JOIN REST_REVIEW R
ON M.MEMBER_ID = R.MEMBER_ID
WHERE M.MEMBER_ID IN (SELECT MI FROM A)
ORDER BY 3, 2
사용 예)
# 현재 날짜
SELECT GETDATE( )
# 년도
SELECT YEAR(GETDATE())
# 월
SELECT MONTH(GETDATE())
# 일
SELECT DAY(GETDATE())