KATA#42

codataffee·2024년 5월 24일
0

CODEKATA

목록 보기
42/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Tweets' Rolling Averages

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT user_id,
       tweet_date,
       ROUND(AVG(tweet_count) OVER(PARTITION BY user_id ORDER BY tweet_date 
       ROWS BETWEEN 2 PRECEDING AND CURRENT ROW), 2)
FROM tweets
GROUP BY user_id, tweet_date, tweet_count

✔️ 문제 #2: Signup Activation Rate

✔️ 제출 쿼리

✔️ 쿼리 분석

# 곱하기 1.0 을 해주는 이유에 대해 기억하기!
SELECT ROUND(COUNT(DISTINCT CASE WHEN signup_action = 'Confirmed' THEN user_id ELSE NULL END) * 1.0
             / COUNT(DISTINCT user_id),2)
FROM emails e LEFT JOIN texts t
     ON e.email_id = t.email_id
  • 1.0을 곱해주는 이유?
    SQL에서 정수끼리 나누기를 하면 결과가 정수로 반환,
    소수점 이하 부분이 버려져 정확한 비율을 얻을 수 없는 상황이 생길 수 있기 때문에
    정수에 실수 1.0을 곱하여 암시적 형 변환(실수로 변환)을 통해 소수점 표현이 가능하다!

✔️ 문제 #3: International Call Percentage

✔️ 제출 쿼리

✔️ 쿼리 분석

# WITH 문으로 발신자, 수신자 각각의 id와 국가 조회하는 테이블 생성
WITH caller_info AS (
    SELECT caller_id, 
    	   country_id caller_country_id
    FROM phone_info
),
receiver_info AS (
    SELECT caller_id, 
    	   country_id receiver_country_id
    FROM phone_info
)
# 통화기록 테이블과 각 발신자, 수신자 국가를 조인하여
# 국가가 같지 않으면 국제전화 (1), 같으면 (0) 으로 출력하여 합계 구하기
# 통화기록의 caller_id 의 갯수로 나누고 100을 곱하여 백분율로 표현, 소수점 1자리 반올림
SELECT ROUND(SUM(CASE WHEN ci.caller_country_id != ri.receiver_country_id 
  				 THEN 1 ELSE 0 END)
           / COUNT(ci.caller_id) * 100.0 , 1) international_calls_pct
FROM phone_calls pc LEFT JOIN caller_info ci 
	 ON pc.caller_id = ci.caller_id LEFT JOIN receiver_info ri 
     ON pc.receiver_id = ri.caller_id

✔️ CHECK POINT

  • SQL 챌린지 과제 풀이로 카타 대체!

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

0개의 댓글

관련 채용 정보