- 1193. Monthly Transactions I
SELECT date_format(trans_date, '%Y-%m') as month,
country,
count(state) as trans_count,
count(case when state = 'approved' then 1 end) as approved_count,
sum(amount) as trans_total_amount,
sum(if(state = 'approved', amount, 0)) as approved_total_amount
FROM transactions
GROUP BY 1,2
- 1174. Immediate Food Delivery II
SELECT round(count(case when immediate = 'immediate' then 1 end) / count(*) * 100,2) as immediate_percentage
FROM
(
SELECT customer_id,
order_date,
if(order_date = customer_pref_delivery_date, 'immediate', 'scheduled') as immediate,
first_value(order_date) over(partition by customer_id order by order_date) as first_order
FROM delivery
)
A
WHERE order_date = first_order
- 550. Game Play Analysis IV
WITH A as
(
SELECT player_id,
event_date,
first_value(event_date) over(partition by player_id) as first_login
FROM activity
)
SELECT
round(
(
SELECT count(distinct player_id)
FROM A
WHERE event_date = first_login + 1)/
count(distinct player_id),2) as fraction
FROM activity
- 구할 것 : Round((첫 로그인 다음날 로그인한 유저수 / 전체 유저수) , 2)
- 세부 구현
- 유저별 첫 로그인 날짜
- 그 다음날 로그인한 유저
- WHERE event_date = first_value + 1
- 2번 유저 카운트
- count(distinct player_id)
- 전체 유저 카운트
- count(distinct player_id)
- 나누고 반올림
- 2356. Number of Unique Subjects Taught by Each Teacher
SELECT teacher_id, count(distinct subject_id) as cnt
FROM teacher
GROUP BY 1
- 구할 것 : 선생님별 교육 과목 수
- 세부 구현
- 선생님별 그룹 바이
- 고유 과목 수 세기
- COUNT(distinct subject_id)
- 1141. User Activity for the Past 30 Days I
SELECT activity_date AS day, Count(DISTINCT user_id) as active_users
FROM Activity
WHERE activity_date between DATE_ADD('2019-07-27', INTERVAL -29 DAY) and '2019-07-27'
Group BY activity_date
- 구해볼 것 : 2019-07-27 부터 30일 전까지 요일별 레코드가 찍힌 유저 수
- 세부 구현
- 요일별 그룹바이
- 2019-07-27 부터 30일 전까지
- WHERE activity_date IN DATEDIFF(’2019-07-27’, 30)
- 유저 수 카운트
- 1070. Product Sales Analysis III
SELECT product_id, year as first_year, quantity, price
FROM sales
WHERE (product_id, year) in
(
SELECT product_id, min(year)
FROM sales
GROUP BY 1
)
- 구해볼 것 : 제품별 첫 구매년도의 정보 (ID, 연도, 양, 가격) 구하기
- 세부 구현
- 첫 구매년도 구하기
- WHERE year in (SELECT min(year) FROM sales group by product_id)
- 제품별 그룹바이
- 정보 출력
- 596. Classes More Than 5 Students
SELECT class
FROM courses
GROUP BY 1
HAVING COUNT(student) >= 5
- 구해야 할 것 : 5명 이상의 학생을 보유한 수업
- 세부 구현
- 수업 그룹바이
- 학생 수 5명 이상 조건
- 수업 출력
- 1729. Find Followers Count
SELECT user_id, COUNT(follower_id) followers_count
FROM followers
GROUP BY 1
ORDER BY 1
- 619. Biggest Single Number
SELECT MAX(num) as num
FROM
(
SELECT num
FROM mynumbers
GROUP BY num
HAVING count(*) = 1
) A
- 구해야 하는 것 : 하나만 보유 중인 숫자 중 가장 큰 숫자 (Null일 땐 NULL 로 표기)
- 세부 구현
- 숫자로 그룹바이
- having으로 한 번만 나온 숫자 조건 부여
- max 로 가장 큰 num 출력
- 없을 경우 null 로 표기되어야 하므로 인라인 서브쿼리 활용
- 1045. Customers Who Bought All Products
SELECT customer_id
FROM customer
GROUP BY 1
HAVING (count(distinct product_key) / (SELECT count(*) FROM product)) = 1
- 구해야 할 것 : 모든 제품을 구매한 고객 ID
- 세부 구현
- 손님별 그룹 바이
- (손님별 구매한 제품) / (전체 제품 수) = 1 인 손님ID 출력