처음 작성한 답안(오답)
SELECT
YEAR(O.SALES_DATE) YEAR,
MONTH(O.SALES_DATE) MONTH,
U.GENDER,
COUNT(*) USERS
FROM USER_INFO U JOIN ONLINE_SALE O
ON U.USER_ID = O.USER_ID
WHERE U.GENDER IS NOT NULL
GROUP BY U.USER_ID
ORDER BY YEAR, MONTH, GENDER ASC
아무래도 컬럼이 중복된 것 같다.

YEAR가 2022, MONTH가 1, GENDER가 0인 행이 1개만 있어야 되는데, 여러 개로 갈라졌다.
USER_ID가 겹쳐도 하나만 카운트하도록 COUNT(DISTINCT U.USER_ID)를 써보면 어떨까?
이를 적용하니 정답이었다.
정답 코드
SELECT
YEAR(O.SALES_DATE) YEAR,
MONTH(O.SALES_DATE) MONTH,
U.GENDER,
COUNT(DISTINCT U.USER_ID) USERS
FROM USER_INFO U INNER JOIN ONLINE_SALE O
ON U.USER_ID = O.USER_ID
WHERE U.GENDER IS NOT NULL
GROUP BY YEAR, MONTH, GENDER
ORDER BY YEAR, MONTH, GENDER ASC;
GROUP BY, ORDER BY에서 별칭을 쓰곤 하는데, MySQL에서는 허용되지만 오류가 나는 DBMS도 있다고 한다. 원 표현식을 쓰는 연습도 해야겠다.
사용자 행동 데이터 분석: 3. 데이터를 분석할 때 주의할 점 4가지
EX 회원가입 프로세스에서 어느 단계에 어떤 데이터가 쌓이는지 제대로 파악하지 못하면 문제가 생겨도 바로 알아채지 못할 수 있음.☑️ 데이터 전처리를 왜 해야하는가?
ex 성별=>같은 남자를 나타내는 데이터라도 '남', '남성'과 같이 다른 형태로 표시될 수 있음.
즉, 실제 데이터는 원하는 형태로 구축되어있지 않다.
데이터를 통해 무엇을 얻고자 하는지, 그 목적을 달성하기 위해 데이터 전처리가 필요
☑️ Pandas 란?
Python에서 데이터를 조작하고 쉽게 분석할 수 있게 도와주는 라이브러리
☑️ Pandas 구조

시리즈는 컬럼 1개, 데이터프레임은 여러개