๐Ÿ’ฏ Coding Test/SQL ํ…Œ์ŠคํŠธ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (Lv 4) - ์ €์ž ๋ณ„ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ ๋งค์ถœ์•ก ์ง‘๊ณ„ํ•˜๊ธฐ

Dev_sHu 2024. 4. 3. 19:43

1) ๋ฌธ์ œ ์„ค๋ช…

  • ๋‹ค์Œ์€ ์–ด๋А ํ•œ ์„œ์ ์—์„œ ํŒ๋งค์ค‘์ธ ๋„์„œ๋“ค์˜ ๋„์„œ ์ •๋ณด(BOOK), ์ €์ž ์ •๋ณด(AUTHOR) ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

 

  • BOOK ํ…Œ์ด๋ธ”์€ ๊ฐ ๋„์„œ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
       
Column name Type Nullable Description
BOOK_ID INTEGER FALSE ๋„์„œ ID
CATEGORY VARCHAR(N) FALSE ์นดํ…Œ๊ณ ๋ฆฌ (๊ฒฝ์ œ, ์ธ๋ฌธ, ์†Œ์„ค, ์ƒํ™œ, ๊ธฐ์ˆ )
AUTHOR_ID INTEGER FALSE ์ €์ž ID
PRICE INTEGER FALSE ํŒ๋งค๊ฐ€ (์›)
PUBLISHED_DATE DATE FALSE ์ถœํŒ์ผ
  • AUTHOR ํ…Œ์ด๋ธ”์€ ๋„์„œ์˜ ์ €์ž์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
       
Column name Type Nullable Description
AUTHOR_ID INTEGER FALSE ์ €์ž ID
AUTHOR_NAME VARCHAR(N) FALSE ์ €์ž๋ช…
  • BOOK_SALES ํ…Œ์ด๋ธ”์€ ๊ฐ ๋„์„œ์˜ ๋‚ ์งœ ๋ณ„ ํŒ๋งค๋Ÿ‰ ์ •๋ณด๋ฅผ ๋‹ด์€ ํ…Œ์ด๋ธ”๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
       
Column name Type Nullable Description
BOOK_ID INTEGER FALSE ๋„์„œ ID
SALES_DATE DATE FALSE ํŒ๋งค์ผ
SALES INTEGER FALSE ํŒ๋งค๋Ÿ‰

2) ๋ฌธ์ œ

  • 2022๋…„ 1์›”์˜ ๋„์„œ ํŒ๋งค ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ €์ž ๋ณ„, ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ ๋งค์ถœ์•ก(TOTAL_SALES = ํŒ๋งค๋Ÿ‰ * ํŒ๋งค๊ฐ€) ์„ ๊ตฌํ•˜์—ฌ, ์ €์ž ID(AUTHOR_ID), ์ €์ž๋ช…(AUTHOR_NAME), ์นดํ…Œ๊ณ ๋ฆฌ(CATEGORY), ๋งค์ถœ์•ก(SALES) ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

  • ๊ฒฐ๊ณผ๋Š” ์ €์ž ID๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ, ์ €์ž ID๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

 

3) ์˜ˆ์‹œ

  • ์˜ˆ๋ฅผ ๋“ค์–ด BOOK ํ…Œ์ด๋ธ”๊ณผ AUTHOR ํ…Œ์ด๋ธ”, BOOK_SALES ํ…Œ์ด๋ธ”์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋ฉด
         
BOOK_ID CATEGORY AUTHOR_ID PRICE PUBLISHED_DATE
1 ์ธ๋ฌธ 1 10000 2020-01-01
2 ๊ฒฝ์ œ 1 9000 2021-02-05
3 ๊ฒฝ์ œ 2 9000 2021-03-11
   
AUTHOR_ID AUTHOR_NAME
1 ํ™๊ธธ๋™
2 ๊น€์˜ํ˜ธ
     
BOOK_ID SALES_DATE SALES
1 2022-01-01 2
2 2022-01-02 3
1 2022-01-05 1
2 2022-01-20 5
2 2022-01-21 6
3 2022-01-22 2
2 2022-02-11 3
  • 2022๋…„ 1์›”์˜ ๋„์„œ ๋ณ„ ์ด ๋งค์ถœ์•ก์€ ๋„์„œ ID ๊ฐ€ 1 ์ธ ๋„์„œ๊ฐ€ ์ด 3๊ถŒ * 10,000์› = 30,000์›, ๋„์„œ ID ๊ฐ€ 2 ์ธ ๋„์„œ๊ฐ€ ์ด 14๊ถŒ * 9,000 = 126,000์› ์ด๊ณ , ๋„์„œ ID ๊ฐ€ 3 ์ธ ๋„์„œ๊ฐ€ ์ด 2๊ถŒ * 9,000 = 18,000์› ์ž…๋‹ˆ๋‹ค.

 

  • ์ €์ž ๋ณ„ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„๋กœ ๋งค์ถœ์•ก์„ ์ง‘๊ณ„ํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
       
AUTHOR_ID AUTHOR_NAME CATEGORY TOTAL_SALES
1 ํ™๊ธธ๋™ ์ธ๋ฌธ 30000
1 ํ™๊ธธ๋™ ๊ฒฝ์ œ 126000
2 ๊น€์˜ํ˜ธ ๊ฒฝ์ œ 18000
  • ๊ทธ๋ฆฌ๊ณ  ์ €์ž ID, ์นดํ…Œ๊ณ ๋ฆฌ ์ˆœ์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
       
AUTHOR_ID AUTHOR_NAME CATEGORY TOTAL_SALES
1 ํ™๊ธธ๋™ ์ธ๋ฌธ 30000
1 ํ™๊ธธ๋™ ๊ฒฝ์ œ 126000
2 ๊น€์˜ํ˜ธ ๊ฒฝ์ œ 18000

4) ํ’€์ด

SELECT b.AUTHOR_ID
     , a.AUTHOR_NAME
     , b.CATEGORY
     , SUM(PRICE * SALES) AS "TOTAL_SALES"
FROM BOOK b
INNER JOIN (SELECT BOOK_ID, SUM(SALES) AS "SALES"
            FROM BOOK_SALES
            WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-01'
            GROUP BY BOOK_ID) s
ON b.BOOK_ID = s.BOOK_ID
INNER JOIN AUTHOR a
ON b.AUTHOR_ID = a.AUTHOR_ID
GROUP BY b.AUTHOR_ID, CATEGORY
ORDER BY 1 ASC, 3 DESC;

 

[Reference]

 

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

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

programmers.co.kr

 

๋ฐ˜์‘ํ˜•