[SQL] GROUP BY 연습

pysun·2024년 9월 25일

SQL

목록 보기
4/11

1번 문제:

영화 5편 이상을 찍은 감독별 평균 rating은?

SELECT
	director,
    ROUND(AVG(rating), 2) AS avg_rating,
    COUNT(*) AS cnt_movies
FROM
	movies
WHERE 1=1
	AND rating IS NOT NULL
    AND director IS NOT NULL
GROUP BY
	director
HAVING
	cnt_movies >= 5
ORDER BY
	avg_rating DESC;

2번 문제:

21세기에 개봉한 영화 평균 평점은?

SELECT
	ROUND(AVG(rating), 2) AS avg_rating
FROM
	movies
WHERE 1=1
	AND rating IS NOT NULL
    AND release_date >= 2000;

3번 문제:

가장 많은 영화를 작업한 다작 감독 상위 5명은?

SELECT
	director,
    COUNT(*) AS total_movies
FROM
	movies
WHERE 1=1
	AND director IS NOT NULL
    AND runtime > 45
GROUP BY
	director
LIMIT 5;

4번 문제:

감독별 최고/최저 평점 확인하기

SELECT
	director,
    MAX(rating) AS max_rating,
    MIN(rating) AS min_rating,
    COUNT(*) AS total_movies
FROM
	movies
WHERE 1=1
	AND director IS NOT NULL
    AND rating IS NOT NULL
GROUP BY
	director
HAVING
	total_movies > 1;

5번 문제:

돈을 가장 많이 번 감독 찾기(수익에서 예산을 뺀 금액)

SELECT 
	director,
    SUM(revenue) - SUM(budget) AS real_money
FROM 
	movies
WHERE 1=1
	AND revenue IS NOT NULL
    AND budget IS NOT NULL
    AND director IS NOT NULL
GROUP BY
	director
ORDER BY
	real_money DESC;

6번 문제:

평점 7.0보다 높은 영화가 차지하는 비율이 가장 높은 감독 찾기

SELECT
	director,
	COUNT(CASE WHEN rating > 7.0 THEN 1) * 100 / COUNT(*) AS ratio_over_7,
    COUNT(*) AS total_movies
FROM
	movies
WHERE 1=1
	AND director IS NOT NULL
GROUP BY
	director
HAVING
	total_movies > 5
ORDER BY
	ratio_over_7

7번 문제:

상영 시간별로 영화를 분류하고 그룹화하기

SELECT
	CASE WHEN runtime < 90 THEN
    	'Short'
    WHEN runtime BETWEEN 90 AND 120 THEN
    	'Normal'
    WHEN runtime > 120 THEN
    	'Long'
    END AS runtime_category,
    COUNT(*) AS total_movies
FROM
	movies
GROUP BY
	runtime_category
ORDER BY
	total_movies DESC;
profile
배움의 흔적이 성장으로 이어지는 공간

0개의 댓글