- PostgreSQL Sample Database dvdrental 사용(https://www.postgresqltutorial.com/postgresql-sample-database/)
- PostgresSQL, DBeaver 환경
문제1번) dvd 렌탈 업체의 dvd 대여가 있었던 날짜를 확인해주세요.
select r.rental_date
from rental as r
-- 예시 정답
select distinct date(rental_date)
from rental
문제2번) 영화길이가 120분 이상이면서, 대여기간이 4일 이상이 가능한, 영화제목을 알려주세요.
select f.title
from film as f
where f.length >=120 AND f.rental_duration>=4
-- 예시 정답
select title
from film
where length >=120 and rental_duration>=4
문제3번) 직원의 id 가 2 번인 직원의 id, 이름, 성을 알려주세요
select *
from employees as e
where e.employee_id = 2
# 정답 : Diane Collins
--예시 정답
select staff_id , first_name , last_name
from staff
where staff_id =2
문제4번) 지불 내역 중에서, 지불 내역 번호가 17510 에 해당하는 , 고객의 지출 내역 (amount ) 는 얼마인가요?
select p.amount
from payment as p
where p.payment_id = 17510
# 정답 : 5.99
--예시 정답
select amount
from payment
where payment_id = 17510
문제5번) 영화 카테고리 중에서 ,Sci-Fi 카테고리의 카테고리 번호는 몇번인가요?
select c.category_id
from category as c
where c.name='Sci-Fi'
# 정답 : 14
--예시 정답
select category_id
from category
where name ='Sci-Fi'
문제6번) film 테이블을 활용하여, rating 등급(?) 에 대해서, 몇개의 등급이 있는지 확인해보세요.
-- 1. 등급을 전부 보여주는 방법
select f.rating
from film as f
group by f.rating
-- 2. 등급 개수를 전부 더하는 방법
select count(distinct(f.rating))
from film as f
# 정답 : 5개
--예시 정답
select distinct rating
from film
문제7번) 대여 기간이 (회수 - 대여일) 10일 이상이었던 rental 테이블에 대한 모든 정보를 알려주세요. 단 , 대여기간은 대여일자부터 대여기간으로 포함하여 계산합니다.
select *
from rental as r
where extract(day from r.return_date)-extract(day from r.rental_date)>=10
# 참고 - 타임스탬프 형식 날짜 연산
-- https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions?hl=ko
-- https://docs.microsoft.com/ko-kr/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15
-- https://lcs1245.tistory.com/12
-- 예시 정답
select *, date(return_date) - date(rental_date) +1 as diff_date
from rental
where date(return_date) - date(rental_date) +1 >=10
문제8번) 고객의 id 가 50,100,150 ..등 50번의 배수에 해당하는 고객들에 대해서, 회원 가입 감사 이벤트를 진행하려고 합니다. 고객 아이디가 50번 배수인 아이디와, 고객의 이름 (성, 이름)과 이메일에 대해서 확인해주세요.
select c.customer_id, c.first_name, c.last_name, c.email
from customer as c
where c.customer_id % 50 = 0
-- 예시 정답
select customer_id, last_name, first_name, email
from customer
where mod(customer_id,50) =0
문제9번) 영화 제목의 길이가 8글자인, 영화 제목 리스트를 나열해주세요.
-- 1. 공백을 포함하는 버전 - 제목 길이가 9
select f.title
from film as f
where length(f.title)=9
-- 2. 공백을 제거한 버전 - 제목 길이가 8
select f.title
from film as f
where length(replace(f.title,' ',''))=8
--예시 정답
select length(title), title
from film
where length(title) =8
order by title
문제10번) city 테이블의 city 갯수는 몇개인가요?
select count(distinct(c.city_id))
from city as c
--예시 정답
select count(*)
from city
문제11번) 영화배우의 이름 (이름+' '+성) 에 대해서, 대문자로 이름을 보여주세요. 단 고객의 이름이 동일한 사람이 있다면, 중복 제거하고, 알려주세요.
select distinct upper(a.first_name||' '||a.last_name) as Name
from actor as a
-- 참고
-- https://naon.me/posts/til77
--예시 정답
select distinct upper(first_name ||' '|| last_name)
from actor
문제12번) 고객 중에서, active 상태가 0 인 즉 현재 사용하지 않고 있는 고객의 수를 알려주세요.
select count(distinct(c.customer_id))
from customer as c
where c.active = 0
# 정답 : 15명
--예시 정답
select count(distinct customer_id)
from customer c
where active = 0
문제13번) Customer 테이블을 활용하여, store_id = 1 에 매핑된 고객의 수는 몇 명인지 확인해보세요.
select count(distinct(c.customer_id))
from customer as c
where c.store_id = 1
#정답 : 326명
--예시 정답
select count(distinct customer_id)
from customer c
where store_id =1
문제14번) rental 테이블을 활용하여, 고객이 return 했던 날짜가 2005년6월20일에 해당했던 rental 의 갯수가 몇개였는지 확인해보세요.
select count(distinct(r.rental_id))
from rental as r
where to_char(r.return_date, 'YYYY-MM-DD')='2005-06-20'
-- 참고 : 타임스탬프 문자열 변환
-- https://m.blog.naver.com/sssang97/222054185948
-- 예시 정답
select count(distinct rental_id)
from rental r
where date(return_date) ='2005-06-20'
문제15번) film 테이블을 활용하여, 2006년에 출시가 되고 rating 이 'G' 등급에 해당하며, 대여기간이 3일에 해당하는 것에 대한 film 테이블의 모든 컬럼을 알려주세요.
select *
from film as f
where f.release_year = 2006 and f.rating = 'G' and f.rental_duration = 3
--예시 정답
select *
from film
where release_year ='2006' and rental_duration =3 and rating ='G'
문제16번) langugage 테이블에 있는 id, name 컬럼을 확인해보세요.
select l.language_id, l."name"
from 'language' l
--예시 정답
select language_id , name
from language
문제17번) film 테이블을 활용하여, rental_duration이 7일 이상 대여가 가능한 film 에 대해서 film_id, title, description 컬럼을 확인해보세요.
select f.film_id, f.title, f.description
from film as f
where f.rental_duration >= 7
--예시 정답
select film_id ,title, description
from film
where rental_duration >= 7
문제18번) film 테이블을 활용하여, rental_duration 대여가 가능한 일자가 3일 또는 5일에 해당하는 film_id, title, desciption 을 확인해주세요.
select f.film_id, f.title, f.description
from film as f
where f.rental_duration = 3 or f.rental_duration = 5
--예시 정답
select film_id ,title, description
from film
where rental_duration =3 or rental_duration =5
문제19번) Actor 테이블을 이용하여, 이름이 Nick 이거나 성이 Hunt 인 배우의 id 와 이름, 성을 확인해주세요.
select a.actor_id, a.first_name, a.last_name
from actor as a
where a.first_name = 'Nick' or a.last_name = 'Hunt'
--예시 정답
select actor_id , first_name , last_name
from actor
where first_name = 'Nick' or last_name ='Hunt'
문제20번) Actor 테이블을 이용하여, Actor 테이블의 first_name 컬럼과 last_name 컬럼을, firstname, lastname 으로 컬럼명을 바꿔서 보여주세요.
select a.first_name as firstname, a.last_name as lastname
from actor as a
--예시 정답
select first_name as firstname, last_name as lastname
from actor