//////
//
Search
🌻

라라

1~10번 문제

-- 1.모든 아티스트 이름 조회 SELECT DISTINCT name FROM SQL_Artists ; -- 2.K-pop 장르의 Genre_ID를 조회 > 다시 간단히 생각해보기 SELECT Genre_ID , Name FROM SQL_Genres WHERE Name = 'K-pop' ; -- 3.앨범 발매 연도가 2020년 이후인 앨범의 제목과 연도를 조회 SELECT Title ,Year FROM SQL_Albums WHERE Year >= 2020 ; -- 4.트랙 길이가 240초 이상인 트랙의 제목과 길이를 조회 SELECT Title ,Length FROM SQL_Tracks WHERE Length >= 240 ; -- 5.중복을 제거한 장르명을 모두 조회 SELECT DISTINCT Name FROM SQL_Genres ; -- 6.각 장르별로 몇 개의 트랙이 있는지 조회 SELECT sg.Genre_ID ,sg.name ,COUNT(*) FROM SQL_Genres sg INNER JOIN SQL_Tracks st ON sg.Genre_ID = st.Genre_ID GROUP BY sg.Genre_ID ORDER BY sg.Genre_ID ; -- 7.각 아티스트가 보유한 앨범 개수를 조회 SELECT sa.Artist_ID ,sa.Name ,COUNT(*) FROM SQL_Artists sa INNER JOIN SQL_Albums sa2 ON sa.Artist_ID = sa2.Artist_ID GROUP BY sa.Artist_ID ; -- 8.2020년 이전에 발매된 앨범의 수를 조회 SELECT COUNT(*) FROM SQL_Albums WHERE year <= 2020 ; -- 9.트랙 제목에 '1'이 포함된 트랙을 모두 조회 SELECT Title FROM SQL_Tracks WHERE Title LIKE '%1%' ; -- 10.리뷰 평점이 5점인 앨범 리뷰를 모두 조회 SELECT sr.Reviewer_ID ,sar.Reviewer_ID ,sa.Album_ID ,sa.Title ,Ranking FROM SQL_Albums sa INNER JOIN SQL_Album_Reviews sar ON sa.Album_ID = sar.Album_ID INNER JOIN SQL_Reviewers sr ON sr.Reviewer_ID = sar.Reviewer_ID WHERE Ranking = 5 GROUP BY sr.Reviewer_ID ;
SQL
복사

11~20번 문제

-- 11.각 리뷰어가 작성한 리뷰 수를 조회 SELECT sr.Reviewer_ID ,sar.Reviewer_ID ,COUNT(*) FROM SQL_Reviewers sr INNER JOIN SQL_Album_Reviews sar ON sr.Reviewer_ID = sar.Reviewer_ID GROUP BY sar.Reviewer_ID ; -- 12.각 앨범의 평균 평점을 조회하세요. SELECT sar.Album_id ,sa.Title ,ROUND(AVG(Ranking),1) FROM SQL_Albums sa INNER JOIN SQL_Album_Reviews sar ON sa.Album_ID = sar.Album_ID GROUP BY sar.Album_ID, sa.Title ; -- 13.각 트랙의 제목과 해당 장르명을 함께 조회 SELECT st.title ,sg.Name FROM SQL_Genres sg INNER JOIN SQL_Tracks st ON sg.Genre_ID = st.Genre_ID ; -- 14.각 앨범에 몇 개의 트랙이 있는지 조회 SELECT sa.Album_ID ,sa.Title ,COUNT(st.Track_Num) FROM SQL_Albums sa INNER JOIN SQL_Tracks st ON sa.Album_ID = st.Album_ID GROUP BY sa.Album_ID, sa.Title ; -- 15.트랙 수가 5개 이상인 앨범을 조회 SELECT sa.Album_ID ,sa.Title ,COUNT(st.Track_Num) AS cnttn FROM SQL_Albums sa INNER JOIN SQL_Tracks st ON sa.Album_ID = st.Album_ID GROUP BY sa.Album_ID, sa.Title HAVING COUNT(st.Track_Num) >= 5 ; -- 16. NULL이 아닌 리뷰 코멘트만 조회 SELECT Comment FROM SQL_Album_Reviews WHERE Comment IS NOT NULL ; -- 17. 앨범 리뷰에서 평점이 NULL이면 0으로 대체하여 조회 SELECT sar.Reviewer_ID ,sr.Reviewer_ID ,sar.Album_ID ,sa.Title ,COALESCE(sar.Ranking,0) AS csar_r FROM SQL_Reviewers sr LEFT JOIN SQL_Album_Reviews sar ON sr.Reviewer_ID = sar.Reviewer_ID LEFT JOIN SQL_Albums sa ON sa.Album_ID = sar.Album_ID GROUP BY Album_ID ; -- 17. 팀원들이랑 같이 수정한 쿼리 SELECT sar.Reviewer_ID ,sr.Reviewer_ID ,sar.Album_ID ,sa.Title ,COALESCE(sar.Ranking,0) AS csar_r FROM SQL_Albums sa LEFT JOIN SQL_Album_Reviews sar ON sa.Album_ID = sar.Album_ID LEFT JOIN SQL_Reviewers sr ON sar.Reviewer_ID = sr.Reviewer_ID ; -- 18.앨범 리뷰의 작성일이 올해인 경우만 조회 > 다시풀기 SELECT sr.Reviewer_ID ,sar.Reviewer_ID ,sar.Review_Date FROM SQL_Reviewers sr INNER JOIN SQL_Album_Reviews sar ON sr.Reviewer_ID = sar.Reviewer_ID WHERE sar.Review_Date LIKE '2025%' ; -- 19.리뷰 작성일이 없는 데이터(리뷰 날짜가 NULL)를 조회 SELECT sar.Reviewer_ID ,sr.Reviewer_ID ,sar.Album_ID ,sa.Title FROM SQL_Albums sa LEFT JOIN SQL_Album_Reviews sar ON sa.Album_ID = sar.Album_ID LEFT JOIN SQL_Reviewers sr ON sar.Reviewer_ID = sr.Reviewer_ID WHERE Review_Date IS null ; -- 20.리뷰가 없는 앨범을 조회 SELECT sa.Album_ID ,sa.Title FROM SQL_Albums sa LEFT JOIN SQL_Album_Reviews sar ON sa.Album_ID = sar.Album_ID WHERE sar.Comment IS null ;
SQL
복사

21~30번 문제

-- 21.리뷰가 가장 많은 앨범을 조회 SELECT sar.Album_ID ,sa.Title ,COUNT(*) AS cnt_review FROM SQL_Albums sa INNER JOIN SQL_Album_Reviews sar ON sa.Album_ID =sar.Album_ID GROUP BY sar.Album_ID, sa.Title ORDER BY cnt_review DESC LIMIT 1 ; -- 22.가장 많은 앨범을 가진 아티스트를 조회 SELECT sa.Artist_ID ,sa.Name ,COUNT(sa2.Album_ID) AS cnt_album FROM SQL_Artists sa INNER JOIN SQL_Albums sa2 ON sa.Artist_ID = sa2.Artist_ID GROUP BY sa.Artist_ID, sa.Name ORDER BY cnt_album DESC LIMIT 1 ; -- max값을 구하는 테이블을 하나 만들어서 변동값이 생겨도 대처할 수 있게 만든다. -- 23. 트랙 평균 길이가 가장 긴 장르 SELECT sg.Genre_ID ,sg.Name ,ROUND(AVG(st.Length),1) AS avg_len FROM SQL_Genres sg INNER JOIN SQL_Tracks st ON sg.Genre_ID = st.Genre_ID GROUP BY sg.Genre_ID, sg.Name ORDER BY avg_len DESC LIMIT 1 ; -- 24. 앨범 평균 평점이 4.5 이상인 앨범을 조회 SELECT sa.Album_ID ,sa.Title ,AVG(sar.Ranking) AS avg_r FROM SQL_Albums sa INNER JOIN SQL_Album_Reviews sar ON sa.Album_ID = sar.Album_ID GROUP BY sa.Album_ID, sa.Title HAVING avg_r >= 4.5 ; -- 25. 각 아티스트의 앨범 평균 발매연도 조회 SELECT sa.Artist_ID ,sa.Name ,ROUND(AVG(sa2.Year),0) AS avg_y FROM SQL_Artists sa INNER JOIN SQL_Albums sa2 ON sa.Artist_ID =sa2.Artist_ID GROUP BY sa.Artist_ID, sa.Name ; -- 26. 각 장르별 트랙 총 길이를 조회 SELECT sg.Genre_ID ,sg.Name ,SUM(st.Length) AS sum_len FROM SQL_Genres sg INNER JOIN SQL_Tracks st ON sg.Genre_ID = st.Album_ID GROUP BY sg.Genre_ID, sg.Name ; -- 27. 각 앨범의 평균 트랙 길이를 조회 SELECT sg.Genre_ID ,sg.Name ,ROUND(AVG(st.Length),1) AS avg_len FROM SQL_Genres sg INNER JOIN SQL_Tracks st ON sg.Genre_ID = st.Album_ID GROUP BY sg.Genre_ID, sg.Name ; -- 28. 리뷰 작성자가 등록한 앨범별 평점 합계를 조회 SELECT sar.Reviewer_Id ,sa.Album_ID ,sa.Title ,SUM(sar.Ranking) AS sum_r FROM SQL_Albums sa LEFT JOIN SQL_Album_Reviews sar ON sa.Album_ID = sar.Album_ID INNER JOIN SQL_Reviewers sr ON sr.Reviewer_ID = sar.Reviewer_ID GROUP BY sa.Album_ID ; -- 29.2020년~2025년 사이 작성된 리뷰 코멘트 수가 2개 이상인 앨범을 조회 SELECT sa.Album_ID ,sa.title FROM SQL_Albums sa INNER JOIN SQL_Album_Reviews sar ON sa.Album_ID = sar.Album_ID WHERE sar.Review_Date BETWEEN '2020-01-01' AND '2025-12-31' GROUP BY sa.Album_ID, sa.Title HAVING COUNT(sar.Comment) >= 2 ; -- 30. 각 아티스트의 앨범 수와 총 트랙 수를 함께 조회 SELECT sa.Artist_ID ,sa.name ,COUNT(DISTINCT sa2.Album_ID) AS cnt_ai ,sa2.Title ,COUNT(st.Track_Num) AS cnt_tn FROM SQL_Artists sa INNER JOIN SQL_Albums sa2 ON sa.Artist_ID = sa2.Artist_ID INNER JOIN SQL_Tracks st ON sa2.Album_ID = st.Album_ID GROUP BY sa.Artist_ID,sa.Name ;
SQL
복사