๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SQL/LeetCode

[LeetCode][SQL50] #25. Product Sales Analysis III

by ์ด๋ฎด 2024. 1. 4.
728x90

๐Ÿ’ป ๋ฌธ์ œ ์ฃผ์†Œ : Product Sales Analysis III - LeetCode

 

Product Sales Analysis III - LeetCode

Can you solve this real interview question? Product Sales Analysis III - Table: Sales +-------------+-------+ | Column Name | Type | +-------------+-------+ | sale_id | int | | product_id | int | | year | int | | quantity | int | | price | int | +---------

leetcode.com

 

๐Ÿ’ป ๋ฌธ์ œ

Write a solution to select the product_id, year, quantity, and price for the first year of every product sold. Return the resulting table in any order.

Input๊ณผ Output ์˜ˆ์‹œ

* ์ฐธ๊ณ  ์ฐจ, ์œ„ ํ…Œ์ด๋ธ” ์ค‘ Product ํ…Œ์ด๋ธ”์€ ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉํ•  ์ผ์ด ์—†๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

๋”๋ณด๊ธฐ
select product_id, year as first_year, quantity, price
from Sales
where (product_id, year) in (select product_id, min(year) from Sales group by product_id)

 

๐Ÿ’ป ๋ฌธ์ œ ํ’€์ด

์œ„์—์„œ๋„ ํ•œ ์ฐจ๋ก€ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ์žฌ๋ฏธ์žˆ๊ฒŒ๋„ ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ํ…Œ์ด๋ธ” Sales์™€ Product ํ…Œ์ด๋ธ” ์ค‘ Product ํ…Œ์ด๋ธ”์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ์˜ ์ ‘๊ทผ ๋‹จ๊ณ„๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1๏ธโƒฃ ๊ฐ product_id๋ณ„ ์ฒซ ๋ฒˆ์งธ ํŒ๋งค ์—ฐ๋„
2๏ธโƒฃ 1๏ธโƒฃ์—์„œ ๊ตฌํ•œ ํŒ๋งค์—ฐ๋„์— ๋“ฑ๋ก๋œ id ๋ฐ quantity ๋“ฑ ์ •๋ณด select

 

1๏ธโƒฃ ๊ฐ product_id๋ณ„ ์ฒซ ๋ฒˆ์งธ ํŒ๋งค์—ฐ๋„

์šฐ์„  1๏ธโƒฃ์„ ์‚ดํŽด๋ณด์ž. ๊ฐ product_id๋ณ„ ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„  ์ด ์ปฌ๋Ÿผ์„ group by๋กœ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  '์ฒซ ๋ฒˆ์งธ' ํŒ๋งค์—ฐ๋„๋ผ๋Š” ๊ฒƒ์€, ํŒ๋งค์—ฐ๋„๊ฐ€ ๊ฐ€์žฅ ์ด๋ฅธ ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ ์ˆซ์ž๋กœ ๋”ฐ์ง€๋ฉด ๊ฐ’์ด ์ œ์ผ ์ž‘๊ธฐ์— min() ํ•จ์ˆ˜๋ฅผ ์จ์•ผ ํ•œ๋‹ค.

select product_id, min(year) 
from Sales 
group by product_id

 

๋‹ค๋งŒ ์ด์ „์— ํ•œ ๋ฒˆ ์–˜๊ธฐํ–ˆ๋“ฏ, group by๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์„ ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์ด ๋ฌถ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜ ํ‘œ์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

Product_id Year Quantity
1 2020 50
1 2010 30

 

 

Product_id min(Year) Quantity
1 2010 50

 

product_id๊ฐ€ 1์ธ ์ƒํ’ˆ์„ ์œ„ ์ฝ”๋“œ๋Œ€๋กœ ์‹คํ–‰ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด min(year)์€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•œ ๋Œ€๋กœ ์ฒซ ํŒ๋งค์—ฐ๋„๊ฐ€ ์ถœ๋ ฅ๋˜๊ฒ ์ง€๋งŒ ๊ทธ ์™ธ์—๋Š” ๋ณ„๋„ ํ•จ์ˆ˜ ๋“ฑ์„ ์“ฐ์ง€ ์•Š๋Š” ํ•œ ์ฒซ ๋ฒˆ์งธ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌถ์ด๊ธฐ ๋•Œ๋ฌธ์— Qty๋Š” 30์ด ์•„๋‹Œ 50์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์œ„ 1๏ธโƒฃ ์กฐ๊ฑด์„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ๋„ฃ์–ด์„œ ์ถœ๋ ฅ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜ฌ product_id์™€ year(min)์„ ๊ฐ€์ง€๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์กฐ๊ฑด์„ ๊ฑธ์–ด์•ผ ํ•œ๋‹ค.

select
from Sales
where (product_id, year) in (select product_id, min(year) from Sales group by product_id)

 

2๏ธโƒฃ 1๏ธโƒฃ์—์„œ ๊ตฌํ•œ ํŒ๋งค์—ฐ๋„์— ๋“ฑ๋ก๋œ id ๋ฐ quantity ๋“ฑ ์ •๋ณด select

์ด์ œ ์—ฌ๊ธฐ์— ๋ฌธ์ œ ์กฐ๊ฑด์ธ select๋กœ ์ถ”์ถœํ•  ์ปฌ๋Ÿผ๋ช…๋งŒ ๋„ฃ์–ด์ฃผ๋ฉด ๋ณธ ๋ฌธ์ œ๋Š” ํ’€๋ฆฐ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•