Programmers] λ , μ, μ±λ³ λ³ μν ꡬ맀 νμ μ ꡬνκΈ°
λ¬Έμ
π 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λ₯Ό νλ μ μΈν μ μμμ!