-- -- 1. 가장 많은 수의 리뷰를 남긴 리뷰어를 찾아라. (동률이라면, 사전학적으로 더 빠른 사람의 이름)
-- -- 2. February 2020에 가장 높은 평점의 영화 제목을 찾아라. 동률이면 사전학적으로 더 빠른 영화의 이름
-- -- 1,2 의 결과는 results 테이블로 출력
WITH CTE AS (
SELECT user_id, COUNT(*) as cnt
FROM MovieRating
GROUP BY
user_id),
reviewer AS (
SELECT user_id
FROM CTE
WHERE cnt = (SELECT MAX(cnt) FROM CTE)
),
result_1 AS (
SELECT name as results
FROM Users
WHERE user_id IN (SELECT user_id FROM reviewer)
ORDER BY
name ASC
LIMIT 1
),
movie_rate AS (
SELECT movie_id, AVG(rating) as avg_rate
FROM MovieRating
WHERE DATE_FORMAT(created_at, "%Y-%m") = "2020-02"
GROUP BY
movie_id
ORDER BY
avg_rate DESC
),
rating_high AS (
SELECT movie_id
FROM movie_rate
WHERE avg_rate = (SELECT MAX(avg_rate) FROM movie_rate )
),
result_2 AS (
SELECT title
FROM Movies
WHERE movie_id IN (SELECT movie_id FROM rating_high)
ORDER BY
title ASC
LIMIT 1
)
SELECT results FROM result_1
UNION ALL
SELECT title FROM result_2
최대한 자잘하게 쪼개보려고 이렇게 진행했다.
이제까지 SQL 문제를 풀면서 집계 함수를 ORDER BY절에 사용을 잘 안 했는데, 이를 활용하면 적은 쿼리로 문제를 풀 수 있다.
ORDER BY절이 쿼리 상 맨 마지막으로 실행되기 때문에, 이미 계산이 된 집계 함수는 결과를 알고 있어서 정렬 기준으로 사용이 가능하다.