SQL

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค level 4] ๋…„, ์›”, ์„ฑ๋ณ„ ๋ณ„ ์ƒํ’ˆ ๊ตฌ๋งค ํšŒ์› ์ˆ˜ ๊ตฌํ•˜๊ธฐ

1eehyunji 2023. 7. 16. 01:56

๋ฌธ์ œ ์„ค๋ช…

๋‹ค์Œ์€ ์–ด๋А ์˜๋ฅ˜ ์‡ผํ•‘๋ชฐ์— ๊ฐ€์ž…ํ•œ ํšŒ์› ์ •๋ณด๋ฅผ ๋‹ด์€ USER_INFO ํ…Œ์ด๋ธ”๊ณผ ์˜จ๋ผ์ธ ์ƒํ’ˆ ํŒ๋งค ์ •๋ณด๋ฅผ ๋‹ด์€ ONLINE_SALE ํ…Œ์ด๋ธ” ์ž…๋‹ˆ๋‹ค.USER_INFO ํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ USER_ID, GENDER, AGE, JOINED๋Š” ๊ฐ๊ฐ ํšŒ์› ID, ์„ฑ๋ณ„, ๋‚˜์ด, ๊ฐ€์ž…์ผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Column nameTypeNullable

USER_ID INTEGER FALSE
GENDER TINYINT(1) TRUE
AGE INTEGER TRUE
JOINED DATE FALSE

GENDER ์ปฌ๋Ÿผ์€ ๋น„์–ด์žˆ๊ฑฐ๋‚˜ 0 ๋˜๋Š” 1์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ 0์ธ ๊ฒฝ์šฐ ๋‚จ์ž๋ฅผ, 1์ธ ๊ฒฝ์šฐ๋Š” ์—ฌ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ONLINE_SALE ํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE๋Š” ๊ฐ๊ฐ ์˜จ๋ผ์ธ ์ƒํ’ˆ ํŒ๋งค ID, ํšŒ์› ID, ์ƒํ’ˆ ID, ํŒ๋งค๋Ÿ‰, ํŒ๋งค์ผ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Column nameTypeNullable

ONLINE_SALE_ID INTEGER FALSE
USER_ID INTEGER FALSE
PRODUCT_ID INTEGER FALSE
SALES_AMOUNT INTEGER FALSE
SALES_DATE DATE FALSE

๋™์ผํ•œ ๋‚ ์งœ, ํšŒ์› ID, ์ƒํ’ˆ ID ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ๋Š” ํ•˜๋‚˜์˜ ํŒ๋งค ๋ฐ์ดํ„ฐ๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.


๋ฌธ์ œ

USER_INFO ํ…Œ์ด๋ธ”๊ณผ ONLINE_SALE ํ…Œ์ด๋ธ”์—์„œ ๋…„, ์›”, ์„ฑ๋ณ„ ๋ณ„๋กœ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•œ ํšŒ์›์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๊ฒฐ๊ณผ๋Š” ๋…„, ์›”, ์„ฑ๋ณ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ, ์„ฑ๋ณ„ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฒฐ๊ณผ์—์„œ ์ œ์™ธํ•ด์ฃผ์„ธ์š”.

 

๋ฌธ์ œํ’€์ด

SELECT YEAR(SALES_DATE), MONTH(SALES_DATE), GENDER, COUNT(DISTINCT ONLINE_SALE.USER_ID)
FROM USER_INFO
JOIN ONLINE_SALE ON USER_INFO.USER_ID=ONLINE_SALE.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR(SALES_DATE),MONTH(SALES_DATE),GENDER
ORDER BY YEAR(SALES_DATE),MONTH(SALES_DATE),GENDER;
  • USER_INFO ํ…Œ์ด๋ธ”๊ณผ ONLINE_SALE ํ…Œ์ด๋ธ”์„ USER_ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ JOINํ–ˆ๋‹ค.
  • ์„ฑ๋ณ„(GENDER) ์ปฌ๋Ÿผ์ด NULL์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ถ”์ถœํ–ˆ๋‹ค.
  • ํŒ๋งค ๋‚ ์งœ์˜ ๋…„, ์›”, ์„ฑ๋ณ„์„ ๊ธฐ์ค€์œผ๋กœ GROUP BY๋ฅผ ์ด์šฉํ•ด์„œ ๊ทธ๋ฃนํ™”ํ–ˆ๋‹ค.
  • ํŒ๋งค ๋‚ ์งœ์˜ ๋…„, ์›”, ์„ฑ๋ณ„๋ณ„๋กœ ๊ทธ๋ฃนํ™”๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฐœ์ˆ˜(๊ฐ ๊ทธ๋ฃน๋ณ„๋กœ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•œ ํšŸ์ˆ˜)๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์ด๋ฉด์„œ ์ฒ˜์Œ์— ํ‹€๋ ธ๋˜ ์ด์œ ๋Š” ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” DINSTINCT ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ์–ด์คฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ONLINE_SALES ํ…Œ์ด๋ธ”์„ ๋ณด๋ฉด, USER_ID๊ฐ€ 1์ธ์‚ฌ์šฉ์ž๊ฐ€ 2022๋…„ 1์›”์— ๊ตฌ๋งคํ•œ ๋‚ด์—ญ์ด 2๋ฒˆ์ธ๋ฐ, ์—ฌ๊ธฐ์„  2022๋…„ 1์›”์— ๊ตฌ๋งคํ•œ ํšŒ์› ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1๋ฒˆ๋งŒ ์นด์šดํŒ…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค!

๊ทธ๋ž˜์„œ COUNT๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ์–ด์ค„ ๋•Œ, DISTINCT USER_ID๋ฅผ ์ด์šฉํ•ด์„œ USER_ID์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ฃผ๊ณ  ๊ฐฏ์ˆ˜๋ฅผ ์„ธ์–ด์•ผ ํ•œ๋‹ค. 

  • ๋งˆ์ง€๋ง‰์œผ๋กœ ํŒ๋งค ๋‚ ์งœ์˜ ๋…„, ์›”, ์„ฑ๋ณ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.