MySQL DB 문제와 답



MySQL로 각자 두문제씩 문제를 만들어 와서 풀도록 했다. 한지 오래되서 개념도 희미했는데, 이번 기회에 잘 개념 잡은것 같다.



Q1


각각의 대륙(continent)에서 인구수(population)가 가장많은(MAX) 나라(name)를 출력하시오, 단 0명이 최대인 경우 제외(NOT IN)시키시오.

조건 : NOT IN 사용
database : world
table : country

Result :

NameContinentpopulation
AustraliaOceania18886000
BrazilSouth America170115000
ChinaAsia1277558000
NigeriaAfrica111506000
Russian FederationEurope146934000
United StatesNorth America278357000
답 펼치기
SELECT C.CONTINENT, MAX(C.POPULATION) AS MAXPOPULATION FROM COUNTRY C
WHERE POPULATION NOT IN (0)
GROUP BY C.CONTINENT


Q2


‘America’가 들어가있는 대륙(continent) 중에서 인구수(population)가 가장많은(MAX) 나라(name)를 출력하시오, 단 0명이 최대인 경우 제외(NOT IN)시키시오.

조건 : LIKE 사용
database : world
table : country

Result :

NameContinentpopulation
BrazilSouth America170115000
United StatesNorth America278357000
답 펼치기
SELECT C.NAME, C.CONTINENT, C.POPULATION FROM COUNTRY C
JOIN
(
SELECT C.CONTINENT, MAX(C.POPULATION) AS MAXPOPULATION FROM COUNTRY C
WHERE POPULATION NOT IN (0)
GROUP BY C.CONTINENT HAVING C.CONTINENT LIKE "%AMERICA%"
)J ON J.MAXPOPULATION = C.POPULATION AND J.CONTINENT = C.CONTINENT


Q3


장르가 드라마이고, 개봉일이 2019년 이후인 영화중에서 신세경이 출연했던 영화들(2개 있음)보다 상영시간이 더 긴 영화들의 영화제목과 개봉일, 상영시간을 상영시간을 기준으로 내림차순 출력

database : movie
table: movie, stars_in

Result :

MOVIE_NMOPEN_DTSHOW_TM 
더 서치2019-01-17134 
얼굴들2019-01-24131 
하트스톤2019-04-25129 
국경의 왕2019-02-28117 
자전차왕 엄복동2019-02-27116 
스트롱거2019-06-27118 
러브리스2019-04-18126 
더 페이버릿: 여왕의 여자2019-02-21119 
우행록: 어리석은 자의 기록2019-01-17120 
아사코2019-03-14119 
글래스2019-01-17129 
생일2019-04-03120 
기생충2019-05-30131 
원 네이션2019-03-21121 
말모이2019-01-09135 
레토2019-01-03128 
그린 북2019-01-09130 
가버나움2019-01-24126 
쿠르스크2019-01-16117 
살인마 잭의 집2019-02-21152 
그때 그들2019-03-07156 
증인2019-02-13129 
돈키호테를 죽인 사나이2019-05-23132 
세상을 바꾼 변호인2019-06-13120 
체 게바라: 1부 아르헨티나2019-06-13126 
체 게바라: 2부 게릴라2019-06-13127 
메리퀸 오브 스코틀랜드2019-02-14124
라스트 미션2019-03-14116 
바이스2019-04-11132 
파이브 피트2019-04-10116 
어린 의뢰인2019-05-22114 
고양이 여행 리포트2019-05-09119 
답 펼치기
SELECT M.MOVIE_NM, M.OPEN_DT, M.SHOW_TM FROM MOVIE M
WHERE M.SHOW_TM > ANY
(
SELECT M.SHOW_TM FROM MOVIE M
JOIN (SELECT * FROM STARS_IN SI WHERE SI.PEOPLE_NM = '신세경') J
ON J.MOVIE_CD = M.MOVIE_CD
)
AND M.REP_GENRE_NM = '드라마' AND YEAR(M.OPEN_DT) >= 2019


Q4


영화 마녀에 출연한 출연진의 남성과 여성의 수를 각각 구하기

database : movie
table : movie, stars_in, movie_people

Result :

SEXCOUNT(*)
여자11
남자15
답 펼치기
SELECT MP.SEX, COUNT(*) FROM MOVIE_PEOPLE MP
JOIN
(
SELECT * FROM STARS_IN SI
WHERE MOVIE_CD = (SELECT M.MOVIE_CD FROM MOVIE M WHERE M.MOVIE_NM = '마녀')
) J
ON MP.PEOPLE_CD = J.PEOPLE_CD
GROUP BY MP.SEX


Q5


각 유저가 본 영화 중 최대 상영시간을 구하고 최근 유저등록일로 정렬해라

DB : d_diver
테이블 : member, watch_list, movie
조건 : max order by

Result :

IDREG_DATEMAX(J1.SHOW_TM)
testid042019-06-11 23:51:27143
testid032019-06-11 23:39:33118
testid022019-06-11 12:28:54118
testid012019-06-11 10:50:39180
aaa2019-06-11 09:40:12143
test012019-06-05 16:05:16139
답 펼치기
JOIN
(SELECT * FROM MOVIE) J1
ON J1.MOVIE_CD = WL.MOVIE_CD
JOIN
(SELECT DM.ID, DM.REG_DATE FROM D_DIVER.MEMBER DM) J2
ON J2.ID = WL.ID
GROUP BY WL.ID
ORDER BY J2.REG_DATE DESC


Q6


입장 관객 수가 10 ~ 20 사이의 영화에서 스타 출연 수와 영화제목을 구하고 최신 제작일자로 정렬해라 (movie, stars_in)
​ DB : d_diver
테이블 : MOVIE_NM, VIEWS
조건 : count, between, order by

Result :

MOVIE_NMVIEWSCOUNT(J.MOVIE_CD)PRDT_DATE
갤버스턴1842018-01-01
007 스카이폴1262011-01-01
답 펼치기
SELECT J.MOVIE_NM, J.VIEWS, COUNT(J.MOVIE_CD), J.PRDT_DATE FROM STARS_IN SI
JOIN
(
SELECT * FROM MOVIE M
WHERE M.VIEWS BETWEEN 10 AND 20
) J
ON J.MOVIE_CD = SI.MOVIE_CD
GROUP BY J.MOVIE_CD
ORDER BY J.PRDT_DATE DESC


Q7

category_id값이 10미만 이면 “인기장르” 그외 “비주류장르” 이라 하고 Z로 시작하는 title, description, 장르인기도를 구하시오.

database : sakila table : file_category, film_text
(Select, join, case, as)


Result :

TITLEDESCRIPTION인기도
ZHIVAGO COREA Fateful Yarn of a Composer And a Man who must Face a Boy in The Canadian Rockies비주류 장르
ZOOLANDER FICTIONA Fateful Reflection of a Waitress And a Boat who must Discover a Sumo Wrestler in Ancient China인기장르
ZORRO ARKA Intrepid Panorama of a Mad Scientist And a Boy who must Redeem a Boy in A Monastery인기장르
답 펼치기
SELECT FT.TITLE, FT.DESCRIPTION, J.인기도 FROM FILM_TEXT FT
JOIN
(
SELECT FC.film_ID,
(CASE
WHEN FC.CATEGORY_ID < 10 THEN '인기장르'
ELSE '비주류 장르'
END) AS '인기도'
FROM FILM_CATEGORY FC
)J ON FT.FILM_ID = J.FILM_ID
WHERE FT.TITLE LIKE "Z%"
ORDER BY FT.TITLE


Q8

customer_id별 요금 합이 60이하인 고객id, 총 요금 ,last_update를 구하시오.

database : sakila table : payment, rental (Select, join, group by, sum)


Result :

CUSTOMER_IDSUM(P.AMOUNT)LAST_UPDATE
6158.862006-02-15 22:12:45
9758.822006-02-15 22:12:58
11059.862006-02-15 22:13:04
24850.852006-02-15 22:14:47
28150.862006-02-15 22:15:22
31852.882006-02-15 22:16:01
39557.812006-02-15 22:17:41
답 펼치기
SELECT P.CUSTOMER_ID, SUM(P.AMOUNT), P.LAST_UPDATE FROM PAYMENT P
GROUP BY P.CUSTOMER_ID HAVING SUM(P.AMOUNT) < 60


Q8

한국영화에 출연한 남자배우와 성별이 NULL인 배우들의 영화이름과 배우이름은?
​ DB : d_diver
테이블 : movie, stars_in, movie_people


Result :

영화이름배우이름성별
엘 꼰도르 빠사가우사이남자
오늘도 평화로운감승민남자
나의 PS 파트너강경준남자
작은 연못강경희NULL
맛있는 인생강계선NULL
최종병기 활강규영남자
너의 결혼식강기영남자
답 펼치기
SELECT M.MOVIE_NM, J.PEOPLE_NM, '남자' FROM MOVIE M
JOIN
(
SELECT * FROM STARS_IN SI
WHERE PEOPLE_CD IN (SELECT MP.PEOPLE_CD FROM MOVIE_PEOPLE MP WHERE MP.SEX = '남자')
) J
ON J.MOVIE_CD = M.movie_cd
WHERE M.REP_NATION_NM = '한국'
ORDER BY J.PEOPLE_NM


Q9

멤버들이 시청한 영화 별 영화이름과 영화코드 그리고 영화 시청횟수를 구하여라
​ DB : d_diver
테이블 : movie, watch_list


Result :

MOVIE_NMMOVIE_CD영화 시청 수
토이 스토리 4201840472
쁘띠 아만다201989092
고산자, 대동여지도201596481
극장판 뛰뛰빵빵 구조대 미션: 둥둥이를 구하라!201385011
극장판 나루토 질풍전: 로드 투 닌자201342441
그것만이 내 세상201761041
궁합201509691
골든슬럼버201682501
고백할 수 없는201587451
답 펼치기
SELECT MP.PEOPLE_CD, MP.PEOPLE_NM FROM MOVIE_PEOPLE MP
JOIN
(
SELECT * FROM MOVIE_PEOPLE MP
GROUP BY MP.PEOPLE_NM
HAVING COUNT(MP.PEOPLE_NM) > 1
) J ON MP.PEOPLE_NM = J.PEOPLE_NM
ORDER BY MP.PEOPLE_NM


Q10

이름(stars_in.people_nm)이 ‘마동석’ 또는 ‘김태훈’이 출연한 영화의 ‘배급사’를(companies_in.company_Part_Nm) 중복없이 오름차순으로 정렬하여 출력 하세요

조건 : or 사용
database : d_diver
table : companies_in, stars_in


Result :

company_nm
(주)리틀빅픽쳐스
(주)쇼박스
(주)스톰픽쳐스코리아
(주)싸이더스
(주)에이스메이커무비웍스
(주)엣나인필름
(주)영화사 빅
(주)영화사오원
(주)인벤트스톤
(주)제이앤씨미디어그룹
(주)콘텐츠판다
(주)키위미디어그룹
(주)프레인글로벌
TCO(주)더콘텐츠온
롯데쇼핑㈜롯데엔터테인먼트
롯데컬처웍스(주)롯데엔터테인먼트
메가박스중앙(주)플러스엠
씨너스엔터테인먼트(주)
씨제이엔터테인먼트
씨제이이앤엠(주)
워너브러더스 코리아(주)
주식회사 케이엠스타
코리아 코어 컨텐츠
답 펼치기
SELECT DISTINCT J.COMPANY_NM FROM STARS_IN SI
JOIN
(SELECT * FROM companies_in CI WHERE CI.company_Part_Nm = '배급사') J
ON J.MOVIE_CD = SI.MOVIE_CD
WHERE SI.PEOPLE_NM = '마동석' OR SI.PEOPLE_NM = '김태훈'
ORDER BY J.COMPANY_NM


Q11

‘마동석’이 출연한 영화중 ‘(주)쇼박스’가 하는게 아닌 영화의 장르별 개수를 구하는 쿼리문은 다음과 같다.

select REP_GENRE_NM, count(*)
from d_diver.movie
where movie_cd in (select movie_cd
	            from d_diver.stars_in
                        where people_nm = '마동석' and movie_cd not in (select movie_cd
						            from d_diver.companies_in
						            where company_nm = '(주)쇼박스' ))
group by d_diver.movie.REP_GENRE_NM;

그리고 위의 쿼리를 살짝 바꾼 다음의 쿼리가 있다.

select REP_GENRE_NM, count(*)
from d_diver.movie
where movie_cd in (select movie_cd
	            from d_diver.stars_in
                        where people_nm = '마동석' and movie_cd in (select movie_cd
						            from d_diver.companies_in
						            where company_nm <> '(주)쇼박스' ))
group by d_diver.movie.REP_GENRE_NM;

위에거는 되고, 밑에거는 안되는 이유를 서술하세요 (단, ‘당연히 안되지’는 오답임)


Result :

답 펼치기

예를들어 다음과 같이 테이블이 구성되어있다고 치자. 그리고 범죄와의 전쟁의 movie_cd가 1이라고 가정하자.

movie_cdcompany_nm
1(주)쇼박스
1A
1B
2(주)쇼박스
3(주)쇼박스
4A
5A
5B

이때, select movie_cd from d_diver.companies_in where company_nm = ‘(주)쇼박스’; 쿼리는 다음과 같은 결과를 낸다.

movie_cdcompany_nm
1(주)쇼박스
2(주)쇼박스
3(주)쇼박스

이를 not in연산으로 걸러내면 1, 2, 3이 걸러져 4,5만이 남는다.

그런데, select movie_cd from d_diver.companies_in where company_nm <> ‘(주)쇼박스’; 쿼리는 다음의 결과를 내고

movie_cdcompany_nm
1A
1B
4A
5A
5B

이를 in으로 걸러내면 1, 4, 5가 남게된다. 그래서 그런거임



Q12

남자 배우가 몇번 출현했는지 내림차순으로 정렬하여 새로운 테이블 actor_movie(배우이름, 횟수, 성별)을 생성해서 구하여라 (본인은 새로운 테이블 생성 하지 않았음) ​ DB : d_diver
테이블 : stars_in, movie_people


Result :

배우이름횟수성별
김태훈210남자
이준혁154남자
이승준117남자
박진수104남자
김동현100남자
김정현88남자
이정현77남자
이정민70남자
답 펼치기
SELECT SI.PEOPLE_NM, COUNT(SI.PEOPLE_NM) AS '출연횟수' FROM STARS_IN SI
JOIN
(SELECT * FROM MOVIE_PEOPLE MP WHERE MP.SEX = '남자') J
ON J.PEOPLE_CD = SI.PEOPLE_CD
GROUP BY SI.PEOPLE_NM
ORDER BY 출연횟수 DESC


Q13

영화 장르가 드라마인 영화이름만 가져와서 drama_movie(movie_nm, rep_nation_nm, rep_genre_nm, watch_Grade_Nm) 테이블을 생성하면서 구하여라 -> movie


Result :

movie_nmrep_nation_nmrep_genre_nmwatch_Grage_nm
파업전야한국드라마12세이상관람가
로제타프랑스드라마15세이상관람가
작은 연못한국드라마15세이상관람가
웨딩드레스한국드라마전체관람가
주문진한국드라마12세이상관람가
클로이프랑스드라마청소년관람불가
크레이지 하트미국드라마15세이상관람가
블라인드 사이드미국드라마12세이상관람가
친정엄마한국드라마전체관람가
(…)   
답 펼치기
CREATE TABLE DRAMA_MOVIE
SELECT M.MOVIE_NM, M.REP_NATION_NM, M.REP_GENRE_NM, M.WATCH_GRADE_NM FROM MOVIE M


Q14

2015 년도 이후에 개봉한 미국 영화 중에서 상영 시간이 120분이 넘는 작품의 각 장르의 count를 구하시오.

조건 : select, where, count database : movie
table : movie


Result :

REP_GENRE_NMCOUNT(*)
SF3
공포(호러)1
드라마19
뮤지컬1
범죄4
스릴러3
애니메이션2
액션31
어드벤처5
코미디3
판타지2
답 펼치기
SELECT M.REP_GENRE_NM, COUNT(*) FROM MOVIE M
JOIN
(
SELECT * FROM MOVIE M
WHERE YEAR(M.OPEN_DT) > 2014 AND M.SHOW_TM > 120 AND M.REP_NATION_NM = '미국'
) J
ON J.MOVIE_CD = M.MOVIE_CD
GROUP BY M.REP_GENRE_NM
ORDER BY M.REP_GENRE_NM


Q15

신세경이 출연한 영화 목록을 보이세요

조건 : select, where, count, any
database : movie
table : movie, stars_in


Result :

MOVIE_NMPRDT_DATE
R2B: 리턴투베이스2012-01-01
타짜-신의 손2014-01-01
답 펼치기
SELECT * FROM MOVIE M
WHERE M.MOVIE_CD IN (SELECT SI.MOVIE_CD FROM stars_in SI WHERE SI.PEOPLE_NM = '신세경')


Q16

신세경이 출연한 영화의 수는? 데이타 베이스 : d_diver
사용 테이블 : movie , stares_in
사용 구문 : select , where , count , ANY


Result :

COUNT(*)
2
답 펼치기
SELECT COUNT(*) FROM stars_in SI
WHERE SI.PEOPLE_NM = '신세경'


Q17

LANGUAGE가 English인 국가들의 ‘CODE, NAME, LANGUAGE, GNP’를 CODE 그룹별로 묶어서 보여주되, ‘소득수준’이라는 별도의 열(컬럼)을 만들어서 만약 GNP가 1000 이상일 경우 ‘잘사네’라는 글자가 출력되고, 만약 GNP가 1000 이하일 경우 ‘못사네’라는 글자가 출력되도록 해라.

조건 : Select, Join, Group By, As, Case 사용
database : world
TABLE : country, countrylanguage


Result :

CODENAMELanguageGNP소득수준
ABWArubaEnglish828.00못사네
AIAAnguillaEnglish63.20못사네
ANTNetherlands AntillesEnglish1941.00잘사네
ASMAmerican SamoaEnglish334.00못사네
ATGAntigua and BarbudaEnglish612.00못사네
AUSAustraliaEnglish351182.00잘사네
BHRBahrainEnglish6366.00잘사네
BLZBelizeEnglish630.00못사네
(…)    
답 펼치기
SELECT C.CODE, C.NAME, J.LANGUAGE, C.GNP,
(CASE WHEN C.GNP > 1000 THEN '잘사네' ELSE '못사네' END) AS 소득수준
FROM COUNTRY C
JOIN (SELECT * FROM COUNTRYLANGUAGE CL WHERE CL.LANGUAGE = 'ENGLISH') J
ON C.CODE = J.COUNTRYCODE


Q18

고객 중 지불 내력이 있고 first_name이 4글자이고 A로 시작하는 고객들의 customer_id, first_name, ‘amount 총합’을 first_name 그룹별로 묶어서 출력하라.

조건 : Select, Join, Group By, Sum
database : sakila
TABLE : customer, payment


Result :

customer_idfirst_nameSUM(amount)
33ANNA91.79
85ANNE87.77
196ALMA151.65
367ADAM101.78
389ALAN124.74
454ALEX151.67
582ANDY113.75
답 펼치기
SELECT P.CUSTOMER_ID, J.FIRST_NAME, SUM(P.AMOUNT) FROM PAYMENT P
JOIN (SELECT * FROM CUSTOMER C WHERE C.FIRST_NAME LIKE 'A___') J
ON J.CUSTOMER_ID = P.CUSTOMER_ID
GROUP BY P.CUSTOMER_ID


Q19

배우 강능원과 함께 영화 촬영을 한 감독과, 배우의 개수를 출력하라.

조건 : COUNT, JOIN, GROUP BY
database : movie
table : stars_in, movie_people


Result :

REP_ROLE_NMCOUNT(*)
배우6
답 펼치기
SELECT J1.REP_ROLE_NM, COUNT(*) FROM STARS_IN SI
JOIN(SELECT * FROM MOVIE_PEOPLE MP WHERE MP.PEOPLE_NM = '강능원') J1
ON J1.PEOPLE_CD = SI.PEOPLE_CD
JOIN(SELECT * FROM STARS_IN SI) J2
ON J2.MOVIE_CD = SI.MOVIE_CD
GROUP BY J1.REP_ROLE_NM


Q20

주역 배우가 아닌 Casting을 한 배우가 참여한 영화 중, 국가가 소유하고있는 러닝 타임이 100분 이상인 영화의 개수를 출력하라.

조건 : COUNT, JOIN, GROUP BY
database : movie
table : movie, stars_in


Result :

REP_NATION_NMCOUNT(DISTINCT M.MOVIE_NM)
네덜란드1
대만1
덴마크1
러시아1
미국56
스웨덴1
스페인3
아이슬란드1
영국2
이탈리아2
인도1
일본33
중국2
캐나다1
프랑스9
한국251
호주1
홍콩1
답 펼치기
SELECT M.REP_NATION_NM, COUNT(DISTINCT M.MOVIE_NM) FROM MOVIE M
JOIN (SELECT * FROM STARS_IN SI WHERE SI.CAST IS NOT NULL) J
ON M.MOVIE_CD = J.MOVIE_CD
WHERE M.SHOW_TM >= 100
GROUP BY REP_NATION_NM


Q21

회원의 first_name, last_name과 주소, 주소 업데이트 시간을 표시한다. 대신 district(지역)을 중복 없애준 후 last_update값으로 내림차순으로 정렬.

조건 : Select, Join, Group By, ASC(DESC) 사용.
database : sakila
table : customer, address


Result :

first_namelast_namedistrictlast_update
MARIAMILLERCentral Serbia2014-09-25 22:34:11
GINAWILLIAMSONTaizz2014-09-25 22:34:11
BARRYLOVELACECopperbelt2014-09-25 22:34:11
MAXPITTVojvodina2014-09-25 22:34:11
WILLIAMSATTERFIELDSanaa2014-09-25 22:34:10
GORDONALLARDHodeida2014-09-25 22:34:10
ELLAOLIVERAden2014-09-25 22:34:08
(…)   

결과 : 376row

답 펼치기
SELECT customer.first_name, customer.last_name, address.district, address.last_update FROM customer
JOIN address ON customer.address_id = address.address_id
GROUP BY address.district
ORDER BY last_update DESC;


Q22

title과 rating, rental_rate를 나타낸다. 대신 영화의 카테고리가 ‘comedy’인 영화만 뽑아와야 하며, title에 따라 내림 차순으로 정렬한다. (category 5로 직접 뽑아오기 금지)

조건 : Select, Join, ASC(DESC) 사용.
database : sakila
table : film, category, film_category


Result :

titleratingrental_rate
CLOSER BANGR4.99
ELEMENT FREDDYNC-174.99
SNATCH SLIPPERPG4.99
VELVET TERMINATORR4.99
CONTROL ANTHEMG4.99
AIRPLANE SIERRAPG-134.99
FLINTSTONES HAPPINESSPG-134.99
PINOCCHIO SIMONPG4.99
(…)  

결과 : 58row

답 펼치기
SELECT film.title, film.rating, film.rental_rate FROM film
JOIN film_category ON film.film_id = film_category.film_id
WHERE film_category.category_id IN (SELECT category.category_id FROM category WHERE category.name = 'COMEDY')
ORDER BY film.rental_rate DESC;


Q23

유해진이 출연한 영화들의 배급사를 중복없이 검색하시오

조건 : in, distinct 사용
database : d_diver
TABLE : stars_in, companies_in


Result :

company_nm
롯데쇼핑㈜롯데엔터테인먼트
(주)싸이더스
(주)쇼박스
CGV아트하우스
롯데컬처웍스(주)롯데엔터테인먼트
답 펼치기
SELECT DISTINCT CI.COMPANY_NM FROM COMPANIES_IN CI
JOIN (SELECT * FROM STARS_IN SI WHERE SI.PEOPLE_NM = '유해진') J
ON J.MOVIE_CD = CI.MOVIE_CD
WHERE CI.COMPANY_PART_NM = '배급사'


Q24

장르별 이정현이 출현한 횟수를 구하시오

조건 : join, group by 사용
database : d_diver
TABLE : movie, stars_in


Result :

REP_GENRE_NMCOUNT(*)
사극1
코미디1
스릴러1
드라마4
액션3
가족1
답 펼치기
SELECT M.REP_GENRE_NM, COUNT(*) FROM MOVIE M
JOIN (SELECT * FROM STARS_IN SI WHERE SI.PEOPLE_NM = '이정현') J
ON J.MOVIE_CD = M.MOVIE_CD
GROUP BY M.REP_GENRE_NM


Q25

상영시간이 100분 이상이고 이탈리아에서 10년이내에 제작한 영화의 제작일자(PRDT_DATE)와 일자별 제작 영화 수는?

조건 : DATE 값을 수기로 작성하지 않는다. ex) PRDT_DATE > ‘2019.09.06(X)’
database : d_diver
TABLE : stars_in, movie


Result :

PRDT_DATECOUNT(*)
2010-01-011
2015-01-011
2017-01-012
2018-01-012
답 펼치기
SELECT M.PRDT_DATE, COUNT(*) FROM MOVIE M
JOIN
(
SELECT M.MOVIE_NM, M.PRDT_DATE FROM MOVIE M WHERE M.PRDT_DATE > (YEAR(NOW()) - 10)
)J ON J.MOVIE_NM = M.MOVIE_NM
WHERE M.REP_NATION_NM = '이탈리아' AND M.SHOW_TM > 120
GROUP BY M.PRDT_DATE


Q26

남자배우가 출연한 청소년관람불가 한국 영화중 상영시간이 100분 미만인 영화 장르와 장르별 영화 갯수는?

조건 : ANY 연산자 사용
database : d_diver
TABLE : stars_in, movie, movie_people


Result :

REP_GENRE_NMCOUNT(DISTINCT MOVIE_NM)
SF1
공포(호러)3
드라마20
멜로/로맨스8
미스터리2
스릴러5
액션5
코미디5
답 펼치기
SELECT M.REP_GENRE_NM, COUNT(DISTINCT MOVIE_NM) FROM MOVIE M
JOIN
(
SELECT SI.MOVIE_CD FROM STARS_IN SI
JOIN (SELECT MP.PEOPLE_CD FROM MOVIE_PEOPLE MP WHERE MP.SEX = '남자') J1
ON SI.PEOPLE_CD = J1.PEOPLE_CD
) J2 ON J2.MOVIE_CD = M.MOVIE_CD
WHERE M.WATCH_GRADE_NM = '청소년관람불가' AND M.SHOW_TM < 100 AND M.REP_NATION_NM = '한국'
GROUP BY M.REP_GENRE_NM


Q27

청소년 관람 불가 등급 영화들의 러닝타임 합계는?

조건 : sum
database : d_diver
TABLE : movie


Result :

SUM(M.SHOW_TM)
41534
답 펼치기
SELECT SUM(M.SHOW_TM) FROM MOVIE M
WHERE M.WATCH_GRADE_NM = '청소년관람불가'


Q28

movie_people 테이블에 있는 배우들과 stars_in 테이블에 있는 배우들을 모두 합한 결과에서 중복을 제외한 배우의 수를 구하여라

조건 : sum , union
database : d_diver
TABLE : stars_in, movie_people


Result :

COUNT(*)
23581
답 펼치기
SELECT COUNT(*) FROM (SELECT * FROM STARS_IN SI UNION SELECT * FROM MOVIE_PEOPLE MP) P


Q29

‘남자’이면서 ‘배우’가 출연한 영화의 장르별 평균 상영시간을 출력하라.

조건 : avg
database : d_diver
table : movie, stars_in, movie_people


Result :

REP_GENRE_NMAVG(M.SHOW_TM)
액션115.7306
드라마109.7835
애니메이션87.7520
공포(호러)93.8286
스릴러107.9255
SF119.2975
미스터리108.9763
전쟁102.2239
멜로/로맨스106.2234
범죄119.2197
코미디105.5355
사극121.3376
어드벤처124.7412
판타지118.5738
가족94.6329
뮤지컬114.6522
기타82.0000
답 펼치기
SELECT M.REP_GENRE_NM, AVG(M.SHOW_TM) FROM MOVIE M
JOIN
(
SELECT SI.MOVIE_CD FROM STARS_IN SI
WHERE SI.PEOPLE_CD IN (SELECT MP.PEOPLE_CD FROM MOVIE_PEOPLE MP WHERE MP.SEX = "남자" AND MP.REP_ROLE_NM = "배우")
) J
ON J.MOVIE_CD = M.MOVIE_CD
GROUP BY M.REP_GENRE_NM


Q30

애니메이션 장르(REP_GENRE_NM) 중에서 가장 작은(min 사용) 상영시간(show_Tm)을 가진 영화 제목(movie_nm)과 제작사(company_nm), 상영시간(show_Tm)를 구하라 (중복제거)

조건 : min 사용
database : d_diver
TABLE : movie, companies_in


Result :

MOVIE_NMCOMPANY_NMSHOW_TM
미니 자이언트(주)박수엔터테인먼트43
답 펼치기
SELECT DISTINCT M.MOVIE_NM, J.COMPANY_NM ,M.SHOW_TM FROM MOVIE M
JOIN (SELECT CI.MOVIE_CD, CI.COMPANY_NM FROM COMPANIES_IN CI) J
ON J.MOVIE_CD = M.MOVIE_CD
WHERE M.SHOW_TM = (SELECT MIN(M.SHOW_TM) AS 'MIN TIME' FROM MOVIE M WHERE REP_GENRE_NM = "애니메이션")


Q31

2015이후 고양이 키워드가 포함된 영화제목(movie_nm)에 출연한 배우의 숫자를 구하라

조건 : like 사용
database : d_diver
TABLE : movie, stars_in


Result :

COUNT(*)
14
답 펼치기
SELECT COUNT(*) FROM STARS_IN SI
JOIN(SELECT * FROM MOVIE M WHERE M.MOVIE_NM LIKE "%고양이%") J
ON J.MOVIE_CD = SI.MOVIE_CD
WHERE YEAR(J.PRDT_DATE) >= 2015


Q32

2018년 개봉 영화중 장르별로 상영시간이 가장 긴 영화의 제목, 장르, 개봉일, 나라, 상영시간을 출력. 단, 상영시간 기준 내림차순으로 ​ 조건 : max, between
DB : d_diver
테이블 : movie


Result :

MOVIE_NMREP_GENRE_NMopen_dtREP_NATION_NMshow_Tm
당갈액션2018-04-25인도160
더 스퀘어코미디2018-08-02스웨덴151
브림스톤미스터리2018-07-19네덜란드148
120 BPM드라마2018-03-15프랑스143
디트로이트스릴러2018-05-31미국142
신과함께-인과 연판타지2018-08-01한국141
퍼스트맨SF2018-10-18미국141
마약왕범죄2018-12-19한국139
답 펼치기
SELECT M.MOVIE_NM, M.REP_GENRE_NM, M.OPEN_DT, M.REP_NATION_NM, M.SHOW_TM FROM MOVIE M
JOIN
(
SELECT MAX(M.SHOW_TM) AS MAX_SHOW_TM, M.REP_GENRE_NM  FROM MOVIE M
WHERE YEAR(M.OPEN_DT) = 2018
GROUP BY M.REP_GENRE_NM
) J
ON J.MAX_SHOW_TM = M.SHOW_TM AND M.REP_GENRE_NM = J.REP_GENRE_NM
ORDER BY M.SHOW_TM DESC


Q33

2016~2018 3년간 3번이상 영화를 제작한 제작사와 제작한 영화의 갯수를 내림차순으로 출력. ​ 조건 : count between
DB : d_diver
테이블 : movie, companines_in


Result :

company_nm제작횟수
한국영화아카데미6
(주)영화제작전원사5
(주)하이브미디어코프5
씨제이이앤엠(주)4
(주)페퍼민트앤컴퍼니3
(주)영화사레드피터3
(주)무비락3
(주)비에이엔터테인먼트3
(주)필름케이3
(주)명필름3
명필름랩3
(주)외유내강3
영화사 집3
답 펼치기
SELECT CI.COMPANY_NM, COUNT(CI.COMPANY_NM) AS COUNT FROM COMPANIES_IN CI
JOIN (SELECT * FROM MOVIE M WHERE YEAR(M.PRDT_DATE) BETWEEN 2016 AND 2018) J
ON CI.MOVIE_CD = J.MOVIE_CD
WHERE CI.COMPANY_PART_NM = "제작사"
GROUP BY CI.COMPANY_NM
HAVING COUNT(*) >= 3
ORDER BY COUNT DESC


Q34

전체 영화 중 러닝타임이 독일영화 중 가장 짧은 러닝타임보다 작은 영화이름,러닝타임, 제작국가를 출력하세요.

조건 : All 사용
database : d_diver
table : movie


Result :

MOVIE_NMSHOW_TMREP_NATION_NM
은실이72한국
마징카이저74일본
33리32한국
눈의 여왕76러시아
파리의 도둑고양이70프랑스
롤플레이76한국
(…)  

결과 : 110row

답 펼치기
SELECT M.MOVIE_NM, M.SHOW_TM, M.REP_NATION_NM FROM MOVIE M
WHERE M.SHOW_TM < (SELECT MIN(M.SHOW_TM) FROM MOVIE M WHERE M.REP_NATION_NM = "독일")


Q35

제작사 ‘어뮤즈’에서 참여한 모든 영화들보다 러닝타임이 더 긴 영화들의 영화이름, 러닝타임, 제작국가를 내림차순(러닝타임)으로 출력하세요

조건 : All 사용
database : d_diver
table : movie , companies_in


Result :

MOVIE_NMSHOW_TMREP_NATION_NM
빌리 엘리어트 뮤지컬 라이브180미국
내부자들: 디 오리지널180한국
어벤져스: 엔드게임180미국
황금시대178중국
클라우드 아틀라스172미국
산다165한국
블레이드 러너 2049163미국
호빗: 스마우그의 폐허161미국
당갈160인도
밀레니엄 : 여자를 증오한 남자들157미국
(…)  

결과 : 729row

답 펼치기
SELECT M.MOVIE_NM, M.SHOW_TM, M.REP_NATION_NM FROM MOVIE M
WHERE M.SHOW_TM > ALL
(
SELECT M.SHOW_TM FROM MOVIE M
JOIN
(SELECT CI.MOVIE_CD FROM COMPANIES_IN CI WHERE CI.COMPANY_NM = '어뮤즈') J
ON J.MOVIE_CD = M.MOVIE_CD
)
ORDER BY M.SHOW_TM DESC


Q36

장르별 show_tm을 합산하여 합산한 값을 기준으로 오름차순

조건 : sum 사용
database : d_diver
TABLE : movie


Result :

REP_GENRE_NMSUM(M.SHOW_TM)
기타82
뮤지컬1183
사극1350
전쟁1746
가족1746
어드벤처2555
미스터리4090
판타지4207
SF5447
범죄8070
공포(호러)8798
스릴러9038
코미디15036
멜로/로맨스15087
애니메이션22887
액션26212
드라마54845
답 펼치기
SELECT M.REP_GENRE_NM, SUM(M.SHOW_TM) FROM MOVIE M
GROUP BY M.REP_GENRE_NM
ORDER BY SUM(M.SHOW_TM)


Q37

open_dt를
2017 ~ 2019 -> new
2014 ~ 2016 -> newold
나머지 -> old
영화들을 장르별로 묶어서 count

조건 : COUNT CASE BETWEEN 사용
database : d_diver
TABLE : movie


Result :

REP_GENRE_NMNEWNEWOLDOLD
SF161717
가족953
공포(호러)503113
기타1  
드라마252148116
멜로/로맨스555636
뮤지컬424
미스터리22143
범죄392113
사극353
스릴러353517
애니메이션1406754
액션1228240
어드벤처11101
전쟁961
코미디714829
판타지22116
답 펼치기
SELECT M.REP_GENRE_NM,
SUM(CASE WHEN YEAR(M.OPEN_DT) BETWEEN 2017 AND 2019 THEN 1 END) AS 'NEW',
SUM(CASE WHEN YEAR(M.OPEN_DT) BETWEEN 2014 AND 2016 THEN 1 END) AS 'NEWOLD',
SUM(CASE WHEN YEAR(M.OPEN_DT) < 2014 THEN 1 END) AS 'OLD'
FROM MOVIE M
GROUP BY M.REP_GENRE_NM




© 2019. by mintheon

Powered by mintheon