Tools/- SQL

[SQL] leetcode | 1045. Customers Who Bought All Products

์Šค์œ„๋ฏผ 2025. 2. 1. 15:47

๋ฌธ์ œ

https://leetcode.com/problems/customers-who-bought-all-products/description/

 

์ฝ”๋“œ

๋‚˜์˜ ๋‹ต์•ˆ

select customer_id
from customer
group by 1
having group_concat(product_key separator ',') in 
    (select group_concat(product_key separator ',') 
     from product)

 

ํƒ€ ๋ธ”๋กœ๊ทธ ๋‹ต์•ˆ

SELECT customer_id
FROM Customer
GROUP BY customer_id
HAVING COUNT(DISTINCT product_key) = (SELECT COUNT(*) FROM Product)

 

๋ฌธ์ œ ํ’€์ด

ํƒ€ ๋ธ”๋กœ๊ทธ ๋‹ต์•ˆ์€ product ํ…Œ์ด๋ธ”์˜ product_key์˜ ๊ณ ์œ ํ•œ ๊ฐœ์ˆ˜์™€

customer ํ…Œ์ด๋ธ”์˜ customer์˜ product_key์˜ ๊ณ ์œ ํ•œ ๊ฐœ์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ผ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทผ๋ฐ ๊ณ ๊ฐ์ด ๋งŒ์•ฝ 5, 6์ด ์•„๋‹Œ 5, 7์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉด ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํ’€ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

๋‚˜๋Š” ๊ฐœ์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆซ์ž ์ž์ฒด๋ฅผ ๋น„๊ตํ•˜๊ณ  ์‹ถ์–ด์„œ group_concat์ด๋ผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

sql์—์„œ๋Š” ๋‹ค์ค‘๊ฐ’๊ณผ ๋‹ค์ค‘๊ฐ’์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†๋Š” ๊ฒƒ ๊ฐ™์•„์„œ

group_concat์„ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์ค‘๊ฐ’์„ ๋‹จ์ผ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์—ˆ๋‹ค.

 

  • group_concat( (distinct) ์ปฌ๋Ÿผ separator '๊ตฌ๋ถ„์ž' )

์œ„์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด groupingํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•œ์ค„๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. (groupingํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ ํ•ฉ์ณ์ฃผ๋Š” ๋“ฏ?)

distinct๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต๊ฐ’์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

๋А๋‚€ ์ 

๋‚˜์˜ ํ’€์ด ๋ฐฉ๋ฒ•์€ ์ด ๋ฌธ์ œ์—์„œ๋Š” ๋ถˆํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์‹œ๊ฐ„์ด ๊ธ‰๋ฐ•ํ•œ sql ํ…Œ์ŠคํŠธ์—์„œ๋Š” ํƒ€ ๋ธ”๋กœ๊ทธ ํ’€์ด ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘ธ๋Š” ๊ฒŒ ํ˜„๋ช…ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.