๋ฌธ์
๐ MySQL ์ผ๋ก ํ์ด
๐ ๋ฌธ์ ๋งํฌ :
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ๋ฌธ์ ์ค๋ช :
USER_INFO ํ ์ด๋ธ๊ณผ ONLINE_SALE ํ ์ด๋ธ์์ ๋ , ์, ์ฑ๋ณ ๋ณ๋ก ์ํ์ ๊ตฌ๋งคํ ํ์์๋ฅผ ์ง๊ณํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ๋ , ์, ์ฑ๋ณ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์. ์ด๋, ์ฑ๋ณ ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ์์ ์ ์ธํด์ฃผ์ธ์.
๐ ํ ์ด๋ธ :
๋ค์์ ์ด๋ ์๋ฅ ์ผํ๋ชฐ์ ๊ฐ์ ํ ํ์ ์ ๋ณด๋ฅผ ๋ด์ USER_INFO ํ ์ด๋ธ๊ณผ ์จ๋ผ์ธ ์ํ ํ๋งค ์ ๋ณด๋ฅผ ๋ด์ ONLINE_SALE ํ ์ด๋ธ ์ ๋๋ค.USER_INFO ํ ์ด๋ธ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ผ๋ฉฐ USER_ID, GENDER, AGE, JOINED๋ ๊ฐ๊ฐ ํ์ ID, ์ฑ๋ณ, ๋์ด, ๊ฐ์ ์ผ์ ๋ํ๋ ๋๋ค.
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, ํ๋งค๋, ํ๋งค์ผ์ ๋ํ๋ ๋๋ค.
ONLINE_SALE_ID | INTEGER | FALSE |
USER_ID | INTEGER | FALSE |
PRODUCT_ID | INTEGER | FALSE |
SALES_AMOUNT | INTEGER | FALSE |
SALES_DATE | DATE | FALSE |
๋์ผํ ๋ ์ง, ํ์ ID, ์ํ ID ์กฐํฉ์ ๋ํด์๋ ํ๋์ ํ๋งค ๋ฐ์ดํฐ๋ง ์กด์ฌํฉ๋๋ค.
ํ์ด
์ถ์ธก)
๋ถ๋ฅํ๊ณ ์ ํ๋ 3๊ฐ ์ปฌ๋ผ๊ณผ ํ์ ์์ด๋ ๋ง์ ์ง์ํ๋ ์ฟผ๋ฆฌ ๋จผ์ ํ๊ณ ์ด๋ฅผ ๋ถ๋ฅ ์ปฌ๋ผ์ผ๋ก Group byํด์ค์ countํ๋ฉด ๋ ๋ฏํ๋ค.
์ฟผ๋ฆฌ)
* 1์ฐจ) ์ฑ๊ณต
SELECT A.YEAR, A.MONTH, A.GENDER, COUNT(A.USER_ID) AS USERS
FROM
(SELECT
YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
GENDER,
U.USER_ID
FROM ONLINE_SALE AS O
LEFT OUTER JOIN USER_INFO AS U
ON O.USER_ID = U.USER_ID
WHERE U.GENDER IS NOT NULL
GROUP BY YEAR, MONTH, GENDER, U.USER_ID) AS A
GROUP BY A.YEAR, A.MONTH, A.GENDER
ORDER BY YEAR ASC, MONTH ASC, GENDER ASC
* 2์ฐจ) ์ฑ๊ณต
SELECT A.YEAR, A.MONTH, A.GENDER, COUNT(A.USER_ID) AS USERS
FROM
(SELECT DISTINCT
YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
GENDER,
U.USER_ID
FROM ONLINE_SALE AS O
LEFT OUTER JOIN USER_INFO AS U
ON O.USER_ID = U.USER_ID
WHERE U.GENDER IS NOT NULL) AS A
GROUP BY A.YEAR, A.MONTH, A.GENDER
ORDER BY YEAR ASC, MONTH ASC, GENDER ASC
๋ฆฌ๋ทฐ)
+ ๊ฐ์ ๋ฌ์ ์ค๋ณต ๊ตฌ๋งค ํ์์ ์ ์ธ ํ ํ์๋ ์์๋ค
๊ทธ๋ฆฌ๊ณ ์ข๋ ํจ์จ์ ์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ด!
1์ฐจ์์์ Group by๋ฅผ ์ ์ธํ๊ณ Distinct๋ก ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ๋ฌ์ ์ฌ๋ฌ๋ฒ ๊ตฌ๋งคํ ํ์์๋ฅผ ์ ์ธํ๋ค.
์ด๋ฌ๋๊น ์ฌ๋ฌ๋ชจ๋ก ๊ณต์๊ฐ ๋ง์ด ๋๋ Group by๋ฅผ ํ๋ ์ ์ธํ ์ ์์์!
'Coding Test > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers] ์ฃผ๋ฌธ๋์ด ๋ง์ ์์ด์คํฌ๋ฆผ๋ค ์กฐํํ๊ธฐ (0) | 2023.04.14 |
---|---|
Programmers] ์ทจ์๋์ง ์์ ์ง๋ฃ ์์ฝ ์กฐํํ๊ธฐ (0) | 2023.04.10 |
Programmers] ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ๋์ฌ์ค / ๋์ฌ ๊ฐ๋ฅ ์ฌ๋ถ ๊ตฌ๋ถํ๊ธฐ (0) | 2023.04.07 |
Programmers] ์กฐ๊ฑด์ ๋ง๋ ์ฌ์ฉ์ ์ ๋ณด ์กฐํํ๊ธฐ (0) | 2023.04.07 |
Programmers] ์ต๋๊ฐ ๊ตฌํ๊ธฐ (0) | 2023.04.07 |