https://school.programmers.co.kr/learn/courses/30/lessons/131532
SELECT YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
GENDER,
COUNT(DISTINCT SALE.USER_ID) AS USERS
FROM ONLINE_SALE SALE JOIN USER_INFO U ON U.USER_ID=SALE.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY 1,2,3
ORDER BY 1,2,3
문제 그대로 년, 월, 성별로 그룹화 하고 회원 수를 COUNT하면 된다.
근데 여기서 중요한건 COUNT 시 중복되는 USER_ID는 제외해줘야한다는 것이다. 그래서 COUNT(DISTINCT SALE.USER_ID)
와 같이 작성해야한다.
COUNT(*)
는 NULL을 포함한 열의 갯수를 반환하고 COUNT(필드)
는 해당 필드의 NULL이 아닌 값의 갯수를 반환한다. 만약 필드 내 중복되는 값이 있어도 모두 COUNT하기 때문에 중복을 제외하려면 COUNT(DISTINCT 필드)
와 같이 사용해야한다.