Post

โœ๐Ÿป programmers Lv2. MySQL 7๋ฌธ์ œ(24.10.21)

โœ๐Ÿป programmers Lv2. MySQL 7๋ฌธ์ œ(24.10.21)

programmers Lv2. MySQL 7๋ฌธ์ œ(24.10.21)

50) ๊ฐ€๊ฒฉ๋Œ€ ๋ณ„ ์ƒํ’ˆ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

  • PRODUCT ํ…Œ์ด๋ธ”์—์„œ ๋งŒ์› ๋‹จ์œ„์˜ ๊ฐ€๊ฒฉ๋Œ€ ๋ณ„๋กœ ์ƒํ’ˆ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑ. ์ด๋•Œ ์ปฌ๋Ÿผ๋ช…์€ ๊ฐ๊ฐ ์ปฌ๋Ÿผ๋ช…์€ PRICE_GROUP, PRODUCTS๋กœ ์ง€์ •ํ•ด์ฃผ์‹œ๊ณ  ๊ฐ€๊ฒฉ๋Œ€ ์ •๋ณด๋Š” ๊ฐ ๊ตฌ๊ฐ„์˜ ์ตœ์†Œ๊ธˆ์•ก(10,000์› ์ด์ƒ ~ 20,000 ๋ฏธ๋งŒ์ธ ๊ตฌ๊ฐ„์ธ ๊ฒฝ์šฐ 10,000)์œผ๋กœ ํ‘œ์‹œ.
1
2
3
4
5
6
7
SELECT ( CASE
            WHEN PRICE < 10000 THEN 0
            ELSE TRUNCATE(PRICE, -4)
        END) AS PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC;
  • ๊ฐ€๊ฒฉ์ด 10,000๋ณด๋‹ค ์ž‘์€ ์ œํ’ˆ ๋ชจ๋‘ 0์œผ๋กœ ๊ทธ๋ฃนํ™” : WHEN PRICE < 10000 THEN 0

  • ๊ฐ€๊ฒฉ์ด 10,000 ์ด์ƒ์ธ ๊ฒฝ์šฐ์—๋Š” TRUNCATE(PRICE, -4)๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ€๊ฒฉ์„ 10,000 ๋‹จ์œ„๋กœ ์ž๋ฆ„.

  • TRUNCATE๋Š” 10,000์› ๋‹จ์œ„๋กœ ๋ฒ„๋ฆผ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์คŒ.



51) ๋ฌผ๊ณ ๊ธฐ ์ข…๋ฅ˜ ๋ณ„ ์žก์€ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

  • FISH_NAME_INFO์—์„œ ๋ฌผ๊ณ ๊ธฐ์˜ ์ข…๋ฅ˜ ๋ณ„ ๋ฌผ๊ณ ๊ธฐ์˜ ์ด๋ฆ„๊ณผ ์žก์€ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑ. ๋ฌผ๊ณ ๊ธฐ์˜ ์ด๋ฆ„ ์ปฌ๋Ÿผ๋ช…์€ FISH_NAME, ์žก์€ ์ˆ˜ ์ปฌ๋Ÿผ๋ช…์€ FISH_COUNT๋กœ ํ•˜๊ณ 
    ๊ฒฐ๊ณผ๋Š” ์žก์€ ์ˆ˜ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
1
2
3
4
5
SELECT COUNT(*) AS FISH_COUNT, B.FISH_NAME
FROM FISH_INFO A 
JOIN FISH_NAME_INFO B ON A.FISH_TYPE = B.FISH_TYPE
GROUP BY FISH_NAME
ORDER BY 1 DESC;
  • ํ‹€๋ ธ๋˜ ๋ถ€๋ถ„ : ๋‹น์—ฐํžˆ FISH_NAME์œผ๋กœ ๊ทธ๋ฃนํ™”๋ฅผ ํ•ด์•ผ๋˜๋Š”๋ฐ ์ด๋ฆ„์œผ๋กœ ๊ทธ๋ฃนํ™”๋œ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜๋กœ ๊ณ„์† ๊ทธ๋ฃนํ™”๋ฅผ ์‹œ๋„ํ–ˆ์—ˆ์Œ. ๊ฐฏ์ˆ˜๋ฅผ ๋จผ์ € ๊ทธ๋ฃนํ™” ์‹œํ‚ค๋Š” ๋ง๋„ ์•ˆ๋˜๋Š”..๊ฒƒ์„ ๊ณ„์† ์‹œ๋„ํ–ˆ๋˜ ๊ฒƒ.



52) ROOT ์•„์ดํ…œ ๊ตฌํ•˜๊ธฐ

  • ROOT ์•„์ดํ…œ์„ ์ฐพ์•„ ์•„์ดํ…œ ID(ITEM_ID), ์•„์ดํ…œ ๋ช…(ITEM_NAME)์„ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑ
1
2
3
4
SELECT A.ITEM_ID, A.ITEM_NAME
FROM ITEM_INFO A 
JOIN ITEM_TREE B ON A.ITEM_ID = B.ITEM_ID
WHERE B.PARENT_ITEM_ID IS NULL;



53) ์—ฐ๋„ ๋ณ„ ํ‰๊ท  ๋ฏธ์„ธ๋จผ์ง€ ๋†๋„ ์กฐํšŒํ•˜๊ธฐ

  • AIR_POLLUTION ํ…Œ์ด๋ธ”์—์„œ ์ˆ˜์› ์ง€์—ญ์˜ ์—ฐ๋„ ๋ณ„ ํ‰๊ท  ๋ฏธ์„ธ๋จผ์ง€ ์˜ค์—ผ๋„์™€ ํ‰๊ท  ์ดˆ๋ฏธ์„ธ๋จผ์ง€ ์˜ค์—ผ๋„๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑ. ์ด๋•Œ, ํ‰๊ท  ๋ฏธ์„ธ๋จผ์ง€ ์˜ค์—ผ๋„์™€ ํ‰๊ท  ์ดˆ๋ฏธ์„ธ๋จผ์ง€ ์˜ค์—ผ๋„์˜ ์ปฌ๋Ÿผ๋ช…์€ ๊ฐ๊ฐ PM10, PM2.5๋กœ ํ•ด ์ฃผ์‹œ๊ณ , ๊ฐ’์€ ์†Œ์ˆ˜ ์…‹์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผ. ๊ฒฐ๊ณผ๋Š” ์—ฐ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
1
2
3
4
5
SELECT YEAR(YM) AS 'YEAR', ROUND(AVG(PM_VAL1),2) AS 'PM10', ROUND(AVG(PM_VAL2),2) AS 'PM2.5'
FROM AIR_POLLUTION
WHERE LOCATION2 LIKE '์ˆ˜์›' 
GROUP BY YEAR
ORDER BY YEAR;
  • ์—ฐ๋„๋ณ„ ํ‰๊ท  ๊ณ„์‚ฐ ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ฃนํ™” ํ•ด์•ผ ํ•จ!



54) ์›”๋ณ„ ์žก์€ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

  • ์›”๋ณ„ ์žก์€ ๋ฌผ๊ณ ๊ธฐ์˜ ์ˆ˜์™€ ์›”์„ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑ. ์žก์€ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜ ์ปฌ๋Ÿผ๋ช…์€ FISH_COUNT, ์›” ์ปฌ๋Ÿผ๋ช…์€ MONTH๋กœ ํ•˜๊ณ  ๊ฒฐ๊ณผ๋Š” ์›”์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
1
2
3
4
SELECT COUNT(*) AS 'FISH_COUNT',MONTH(TIME) AS 'MONTH'
FROM FISH_INFO
GROUP BY MONTH
ORDER BY MONTH;



55) ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ์ค‘๊ณ ๊ฑฐ๋ž˜ ์ƒํƒœ ์กฐํšŒํ•˜๊ธฐ

  • USED_GOODS_BOARD ํ…Œ์ด๋ธ”์—์„œ 2022๋…„ 10์›” 5์ผ์— ๋“ฑ๋ก๋œ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒŒ์‹œ๋ฌผ์˜ ๊ฒŒ์‹œ๊ธ€ ID, ์ž‘์„ฑ์ž ID, ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ, ๊ฐ€๊ฒฉ, ๊ฑฐ๋ž˜์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑ. ๊ฑฐ๋ž˜์ƒํƒœ๊ฐ€ SALE ์ด๋ฉด ํŒ๋งค์ค‘, RESERVED์ด๋ฉด ์˜ˆ์•ฝ์ค‘, DONE์ด๋ฉด ๊ฑฐ๋ž˜์™„๋ฃŒ ๋ถ„๋ฅ˜ํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ์‹œ๊ณ , ๊ฒฐ๊ณผ๋Š” ๊ฒŒ์‹œ๊ธ€ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ.
1
2
3
4
5
6
7
8
9
SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, 
    (CASE 
        WHEN STATUS = 'SALE' THEN 'ํŒ๋งค์ค‘'
        WHEN STATUS = 'RESERVED' THEN '์˜ˆ์•ฝ์ค‘'
        WHEN STATUS = 'DONE' THEN '๊ฑฐ๋ž˜์™„๋ฃŒ'
        END)  AS 'STATUS'
FROM USED_GOODS_BOARD
WHERE CREATED_DATE LIKE '2022-10-05'
ORDER BY BOARD_ID DESC;



56) ์žฌ๊ตฌ๋งค๊ฐ€ ์ผ์–ด๋‚˜ ์ƒํ’ˆ๊ณผ ํšŒ์› ๋ฆฌ์ŠคํŠธ ๊ตฌํ•˜๊ธฐ

  • ONLINE_SALE ํ…Œ์ด๋ธ”์—์„œ ๋™์ผํ•œ ํšŒ์›์ด ๋™์ผํ•œ ์ƒํ’ˆ์„ ์žฌ๊ตฌ๋งคํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•˜์—ฌ, ์žฌ๊ตฌ๋งคํ•œ ํšŒ์› ID์™€ ์žฌ๊ตฌ๋งคํ•œ ์ƒํ’ˆ ID๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑ. ๊ฒฐ๊ณผ๋Š” ํšŒ์› ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์‹œ๊ณ  ํšŒ์› ID๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ƒํ’ˆ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ.
1
2
3
4
5
SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >=2
ORDER BY USER_ID ASC, PRODUCT_ID DESC;
  • ์žฌ๊ตฌ๋งคํ•˜๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ• ๊นŒ? ํ–ˆ๋Š”๋ฐ USER_ID ์™€ PRODUCT_ID๊ฐ€ ํšŒ์› ์•„์ด๋””, ์ œํ’ˆ ์•„์ด๋””๋กœ ์„ค์ •๋˜๊ณ  ํ•ด๋‹น ํ•„๋“œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๋ฉด ๋ฌถ์ด๊ฒŒ ๋œ๋‹ค.

  • COUNT(*)๋Š” ๊ฐ ๊ทธ๋ฃน์˜ ํ–‰์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ทธ ๊ฐ’์ด 2์ด์ƒ์ธ ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๋‹ค.



This post is licensed under CC BY 4.0 by the author.