๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ›‹๏ธ ๋ฐ์ดํ„ฐ ๋ถ„์„/๐Ÿชก SQL QUERY TEST

[Advent of SQL 2024๐ŸŽ„] ๊ฒŒ์ž„ ํ‰์  ์˜ˆ์ธกํ•˜๊ธฐ1 (Day9)

by ์œ ์Šค :) 2024. 12. 13.
๋ฐ˜์‘ํ˜•

๋‚œ์ด๋„3

 

Video Game Sales with Ratings ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” 2016๋…„๊นŒ์ง€ ๋ฐœ๋งค๋œ ๊ฒŒ์ž„์˜ ์ฃผ์š” ์ •๋ณด์™€ ํŒ๋งค๋Ÿ‰, ํ‰์  ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. games ํ…Œ์ด๋ธ”์— ๋“ค์–ด์žˆ๋Š” ํ‰์  ์ •๋ณด๋Š” ํ‰๋ก ๊ฐ€ ํ‰์ (critic_score), ํ‰์ ์„ ๋‚จ๊ธด ํ‰๋ก ๊ฐ€ ์ˆ˜(critic_count), ์‚ฌ์šฉ์ž ํ‰์ (user_score), ํ‰์ ์„ ๋‚จ๊ธด ์‚ฌ์šฉ์ž ์ˆ˜(user_count)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‰์  ์ •๋ณด์— ์ผ๋ถ€ ๋ˆ„๋ฝ์ด ์žˆ์Œ์„ ์•Œ๊ฒŒ๋œ ๋‹น์‹ ์€ ๊ฐ™์€ ์žฅ๋ฅด๋ฅผ ๊ฐ€์ง„ ๊ฒŒ์ž„๋“ค์˜ ํ‰๊ท  ํ‰์ ๊ณผ ํ‰๊ท  ํ‰๋ก ๊ฐ€/์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด ๋ˆ„๋ฝ๋œ ๊ฐ’์„ ์ฑ„์šฐ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 2015๋…„ ์ดํ›„์— ๋ฐœ๋งคํ•œ ๊ฒŒ์ž„ ์ค‘ ๋ˆ„๋ฝ๋œ ํ‰์  ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๊ฒŒ์ž„์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ์žฅ๋ฅด๋ฅผ ๊ฐ€์ง„ ์ „์ฒด ๊ฒŒ์ž„์˜ ํ‰๊ท  ํ‰์ ๊ณผ ํ‰๊ท  ํ‰๋ก ๊ฐ€/์‚ฌ์šฉ์ž ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋ˆ„๋ฝ๋œ ์ •๋ณด๋ฅผ ์ฑ„์šฐ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์—๋Š” ๋ˆ„๋ฝ๋œ ํ‰์  ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๊ฒŒ์ž„๋งŒ ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์•„๋ž˜ 6๊ฐœ ์ปฌ๋Ÿผ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ‰๋ก ๊ฐ€์™€ ์‚ฌ์šฉ์ž ํ‰์  ํ‰๊ท ์€ ์†Œ์ˆ˜์  ์•„๋ž˜ ๋„ท์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ ํ•ด ์…‹์งธ ์ž๋ฆฌ๊นŒ์ง€ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ˆ˜๋Š” ์˜ฌ๋ฆผํ•˜์—ฌ ์ž์—ฐ์ˆ˜๋กœ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • game_id: ๊ฒŒ์ž„ ID
  • name: ๊ฒŒ์ž„ ์ด๋ฆ„
  • critic_score: ํ‰๋ก ๊ฐ€ ํ‰์  ํ‰๊ท 
  • critic_count: ํ‰์ ์„ ๋‚จ๊ธด ํ‰๋ก ๊ฐ€ ์ˆ˜
  • user_score: ์‚ฌ์šฉ์ž ํ‰์  ํ‰๊ท 
  • user_count: ํ‰์ ์„ ๋‚จ๊ธด ์‚ฌ์šฉ์ž ์ˆ˜

 

 WITH F AS(
SELECT genre_id, ROUND(AVG(critic_score),3) as f_cri_score, CEILING(AVG(critic_count)) as f_cri_cnt , 
        ROUND(AVG(user_score),3) as f_user_score, CEILING(AVG(user_count)) as f_user_cnt
FROM games
WHERE critic_score is NOT NULL OR user_score is NOT NULL 
GROUP BY genre_id
)

SELECT game_id, name, COALESCE(critic_score,f_cri_score) AS critic_score, COALESCE(critic_count,f_cri_cnt) AS critic_count,
      COALESCE(user_score, f_user_score) as user_score, COALESCE(user_count, f_user_cnt) as user_count
FROM games LEFT JOIN F USING(genre_id)
WHERE (critic_score is NULL or user_score is NULL) AND year >= 2015
๋ฐ˜์‘ํ˜•