๊ด€๋ฆฌ ๋ฉ”๋‰ด

Jerry

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/SQL ๊ณ ๋“์  Kit] ๊ฐ€๊ฒฉ๋Œ€ ๋ณ„ ์ƒํ’ˆ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ ๋ณธ๋ฌธ

Problem Solving/SQL ๋ฌธ์ œ ํ’€๊ธฐ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/SQL ๊ณ ๋“์  Kit] ๊ฐ€๊ฒฉ๋Œ€ ๋ณ„ ์ƒํ’ˆ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

juicyjerry 2023. 11. 9. 11:14
๋ฐ˜์‘ํ˜•

๐Ÿ’ช๋ฌธ์ œ
PRODUCT ํ…Œ์ด๋ธ”์—์„œ ๋งŒ์› ๋‹จ์œ„์˜ ๊ฐ€๊ฒฉ๋Œ€ ๋ณ„๋กœ ์ƒํ’ˆ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ์ปฌ๋Ÿผ๋ช…์€ ๊ฐ๊ฐ ์ปฌ๋Ÿผ๋ช…์€ PRICE_GROUP, PRODUCTS๋กœ ์ง€์ •ํ•ด์ฃผ์‹œ๊ณ  ๊ฐ€๊ฒฉ๋Œ€ ์ •๋ณด๋Š” ๊ฐ ๊ตฌ๊ฐ„์˜ ์ตœ์†Œ๊ธˆ์•ก(10,000์› ์ด์ƒ ~ 20,000 ๋ฏธ๋งŒ์ธ ๊ตฌ๊ฐ„์ธ ๊ฒฝ์šฐ 10,000)์œผ๋กœ ํ‘œ์‹œํ•ด์ฃผ์„ธ์š”. ๊ฒฐ๊ณผ๋Š” ๊ฐ€๊ฒฉ๋Œ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

 

 

๐Ÿ’ช ๋‚˜์˜ ์‹œ๋„(์˜ค๋‹ต)

SET @P = -10000;
SELECT (@P := @P + 10000) AS 'PRICE_GROUP',
(SELECT COUNT(*) FROM PRODUCT WHERE PRICE BETWEEN @P AND @P + 10000) AS 'PRODUCT'
FROM PRODUCT
GROUP BY 1
HAVING @P <= MAX(PRICE)
ORDER BY PRICE_GROUP ASC;

- SET ํ‚ค์›Œ๋“œ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ž˜ ์•ˆ ๋๋‹ค.

> WHERE์ ˆ์—์„œ MAX(PRICE) ๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ, ์ž˜ ์•ˆ ๋ผ์„œ ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋‹ˆ GROUP BY๋กœ ๋ฌถ์–ด HAVING์ ˆ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์–ด์„œ ์‹œ๋„ํ–ˆ์ง€๋งŒ, ์ž˜ ์•ˆ ๋จ

> MAX(PRICE) ๊ฐ€ ์ƒ๊ฐ๋Œ€๋กœ ๋˜์ง€ ์•Š์Œ

 

 

 

๐Ÿ’ช ๋‹ค๋ฅธ ์ •๋‹ต

# ์ •๋‹ต 1

SELECT FLOOR(PRICE / 10000) * 10000 AS `PRICE_GROUP`, 
    COUNT(*) AS PRODUCTS
    FROM PRODUCT
GROUP BY `PRICE_GROUP`
ORDER BY `PRICE_GROUP`;

 

# ์ •๋‹ต 2

SELECT  CASE WHEN (0 < PRICE) AND (PRICE < 10000) then 0
             WHEN (10000 <= PRICE) and (PRICE < 20000) then 10000
             WHEN (20000 <= PRICE) and (PRICE < 30000) then 20000
             WHEN (30000 <= PRICE) and (PRICE < 40000) then 30000
             WHEN (40000 <= PRICE) and (PRICE < 50000) then 40000
             WHEN (50000 <= PRICE) and (PRICE < 60000) then 50000
             WHEN (60000 <= PRICE) and (PRICE < 70000) then 60000
             WHEN (70000 <= PRICE) and (PRICE < 80000) then 70000
             WHEN (80000 <= PRICE) and (PRICE < 90000) then 80000
             END AS PRICE_GROUP, count(*)
  FROM  PRODUCT 
 GROUP 
    BY  PRICE_GROUP
 ORDER
    BY  PRICE_GROUP ASC

 

# ์ •๋‹ต 3

SELECT TRUNCATE(PRICE,-4) AS PRICE_GROUP, COUNT(*) AS PRODUCTS
        FROM PRODUCT
        GROUP BY PRICE_GROUP
        ORDER BY PRICE_GROUP

 

 

 

๐Ÿ’ช ๋ฐฐ์šด ์ 

- CASE ํ‘œํ˜„์‹์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

- TRUNCATE ํ™œ์šฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

 

๐Ÿ’ช ๋งˆ์น˜๋ฉด์„œ

๋‹ค์Œ์—๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๋กœ ์ฐพ์•„๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค!

์•ˆ๋…• :))

 

 

 

 

๋ฐ˜์‘ํ˜•