https://school.programmers.co.kr/learn/courses/30/lessons/131532
USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

SELECT
YEAR(O.SALES_DATE) AS YEAR,
MONTH(O.SALES_DATE) AS MONTH,
U.GENDER,
COUNT(U.USER_ID) AS USERS # 년 월 성별 별로 상품 구매한 회원수
FROM USER_INFO U
JOIN ONLINE_SALE O
ON U.USER_ID=O.USER_ID
GROUP BY YEARS(O.SALES_DATE), MONTH(O.SALES_DATE), U.GENDER
ORDER BY YEAR, MONTH, U.GENDER
GROUP BY YEARS(O.SALES_DATE), MONTH(O.SALES_DATE), U.GENDER
YEARS()라는 함수는 존재하지 않는다
SELECT 절에서는 YEAR(O.SALES_DATE)를 썼는데
GROUP BY에서는 순간 헷갈려서 잘못 표기함
문제 조건 : 성별 정보가 없는 경우 결과에서 제외
하지만 현재 쿼리에는 이 조건이 없음. 문제를 꼼꼼히 읽어볼 것
한 회원이 같은 달에 여러 상품을 구매할 수 있음
그러면 같은 USER_ID가 여러 번 COUNT됨
문제에서 요구한 것은 상품을 구매한 회원 수
→ 즉, 중복 제거된 회원 수
SELECT
YEAR(O.SALES_DATE) AS YEAR,
MONTH(O.SALES_DATE) AS MONTH,
U.GENDER,
COUNT(DISTINCT U.USER_ID) AS USERS
# 년 월 성별 별로 상품 구매한 회원수
FROM USER_INFO U
JOIN ONLINE_SALE O
ON U.USER_ID=O.USER_ID
WHERE U.GENDER IS NOT NULL
GROUP BY YEAR(O.SALES_DATE), MONTH(O.SALES_DATE), U.GENDER
ORDER BY YEAR, MONTH, U.GENDER
YEARS() 👉 YEAR()WHERE절로 성별에 대한 조건 추가DISTINCT 추가