
๋ฌธ์
- LeetCode SQL ๋ฌธ์
1251. Average Selling Price/Easy- ๋ฌธ์ ๋ด์ฉ : [๋งํฌ]
๋ด๊ฐ ์์ฑํ Query
select p.product_id , coalesce(round((sum(u.units * p.price) / sum(units)), 2), 0) as average_price from prices p left join unitssold u on u.product_id = p.product_id and (purchase_date between start_date and end_date) group by p.product_id
์ ํ ๋ฐ ๊ธฐ๊ฐ๋ณ ๊ฐ๊ฒฉ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ prices ํ
์ด๋ธ๊ณผ ์ค์ ํ๋งค๋ฐ์ดํฐ ํ
์ด๋ธ์ธ unitssold ํ
์ด๋ธ์ LEFT JOIN ํด์ค๋ค.
(์ LFET JOIN? : ํ๋งค๋์ง ์์ ๋ฐ์ดํฐ์ ๋ํ average_price๋ ๊ตฌํด์ค์ผํจ.)
LEFT JOIN ์ product_id์ purchase_date๊ฐ start_date , end_date ๊ธฐ๊ฐ ์ฌ์ด์ ์๋ ๋ฐ์ดํฐ๋ค๋ผ๋ฆฌ join ํด์ค๋ค.
(์ด์ ๋ฌธ์ ๋ค์ฒ๋ผ ๋จ์ํ ์ ํ๋ณ id๋ง ๊ณ ๋ คํ๋ฉด ์ ๋๋ค.)
์ ํ๋ณ ์ ๋ณด๋ฅผ ๊ตฌํด์ผํ๋ฏ๋ก, product_id ๋ณ๋ก GROUP BY ํด ์ค๋ค.
SUM(units*price) / SUM(units) ํจ์๋ฅผ ์ด์ฉํ์ฌ average_price๋ฅผ ๊ณ์ฐํด์ค๋ค.
ROUND() ํจ์๋ฅผ ์ด์ฉํด ํ๊ท ๊ฐ๊ฒฉ์ ์์ 2๋ฒ์งธ์ง๋ฆฌ ๊น์ง ๋ฐ์ฌ๋ฆผํด์ค๋ค.
์ดํ ํ๋งค๋ฐ์ดํฐ๊ฐ ์๋ ์ ํ์ ํ๊ท ๊ฐ๋ ์ถ๋ ฅํด์ค์ผ ํ๋,COALESCE()ํจ์๋ฅผ ์ด์ฉํด ํ๋งค ๋ฐ์ดํฐ ์๋ ๊ฒฝ์ฐ '0'์ ์ถ๋ ฅํ๋๋ก ํ๋ค.
๐๐ ์ด ๋ฌธ์ ํน์ด์ฌํญ
1) JOIN ์ ๋จ์ํ ์ปฌ๋ผ๋ช
์ด ๊ฐ์ ์กฐ๊ฑด ์ธ์, ๊ตฌ๋งค๊ธฐ๊ฐ ๋ณ ๊ฐ๊ฒฉ์ด ๋ค๋ฅด๋ฏ๋ก, purchase_date์ ๋ํ ์กฐ๊ฑด๋ ์์์.
2) ํญ์ NULL ์กฐ์ฌํ ๊ฒ! ํ๋งค๋ฐ์ดํฐ๊ฐ ์๋ ์ ํ๋, ์ ํ๋ณ ํ๊ท ๊ฐ๊ฒฉ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด์ผ ํ๋ค. ๋ฐ๋ผ์ ํ๋งค๋ฐ์ดํฐ๊ฐ ์๋ ์ ํ์ ํ๊ท ๊ฐ๊ฒฉ์ COALESEC()๋ฅผ ์ด์ฉํ์ฌ ์ฒ๋ฆฌํด์ค๋ค.!!!!
ํนํ ์ง๊ณํจ์ ์ฌ์ฉ ์ NULL์ ํญ์ ์ฃผ์ํ ๊ฒ!!
