일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 맞춤 자바스크립트
- sql 개발자
- oracle
- Ga
- git
- tableau
- bigquery
- 통계
- 이벤트 매개변수
- 용어 정리
- API
- 크로스셀링
- Funnel
- 상관계수
- SQLD
- SQL
- Python
- Google Analytics
- 후기
- 데이터 분석
- Ecommerce
- 그로스해킹
- It
- pandas
- DISTINCT
- 맞춤 이벤트
- tablueau
- segmentation
- Kaggle
- 캐글
- Today
- Total
녕녀기의 실험일지
[ Oracle ] 프로그래머스 코테 DISTINCT, COUNT, 상품을 구매한 회원 구하기 본문
본문으로
안녕하세요. 녀기입니다.
SQL 연습을 하다가 DISTINCT에 대한 쓰임새?
를 기록하고자 포스팅합니다.
(
사실 이전에 했던 포스팅과 연관이 됩니다...ㅎㅎ
그 때 필기해 놨는데 고새 까먹고 응용을 못 하다니
반성하겠습니다.
벌로 SQL 연습 게을리 하지 않기(?)
😥
)
이전 포스팅은 이렇습니다!
참고용으로 올려 놓을게요.
https://nyeoki-log.tistory.com/35
[ Oracle ] COUNT() 함수를 이용한 집계
본문으로 안녕하세요. 녀기입니다. 굉장히 오랜만이군요. (롱 타임 노 씨?ㅋㅋㅋ) 요즘 출퇴근 시간이 약 4시간이 걸리는 바람에 너무 잠이 모자라고, 운동은 안 하면 체력 떨어지고 해서, 공부에
nyeoki-log.tistory.com
(ORACLE 기준으로 작성됐습니다.)
문제 출처는 아래 ↓
https://school.programmers.co.kr/learn/courses/30/lessons/131534#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
WITH TWENTY_ONE AS (
SELECT *
FROM USER_INFO
WHERE TO_CHAR(JOINED,'YYYY')='2021'
)
SELECT EXTRACT(YEAR FROM OS.SALES_DATE) AS YEAR,
EXTRACT(MONTH FROM OS.SALES_DATE) AS MONTH,
COUNT(DISTINCT(TON.USER_ID)) AS PURCHASED_USERS,
ROUND(
COUNT(DISTINCT(TON.USER_ID))/(SELECT COUNT(USER_ID) FROM TWENTY_ONE),1) AS PURCHASED_RATIO
FROM TWENTY_ONE TON INNER JOIN ONLINE_SALE OS
ON TON.USER_ID = OS.USER_ID
GROUP BY EXTRACT(YEAR FROM OS.SALES_DATE),
EXTRACT(MONTH FROM OS.SALES_DATE)
ORDER BY YEAR, MONTH;
위 문제는 2021년에 가입한 회원들 중에 상품을 구매한 회원의 비율을 연, 월 별로 나눠서 보겠다는 것이 목적입니다.
그래서 2021년에 가입한 회원만 따로 빼 놓았고
구매 기록이 있는 테이블과 INNER JOIN 후에,
구매 기록의 연, 월 별로 GROUPING을 실시했습니다.
처음에 계속 통과를 못 하고 있었는데,
DISTINCT를 사용하지 않아서 생기는 문제였습니다.
COUNT 집계 함수를 사용하면 해당 테이블에서
조건에 맞는 데이터를 전부 세어 줍니다.
근데 보통
한 유저가 한 번의 거래만 하고 끊나지는 않죠.
녀기의 USER_ID가 10이라고 하면,
USER_ID가 10인 데이터가 여러 개 있을 수 있다는 겁니다.
문제에서 원하는 바는
"거래를 했느냐?(거래 기록이 있느냐?)"를
물어보는 것이기에 녀기는 여러 번 포함되면 안 됩니다.
다른 유저가 아니기 때문이죠!
중복된 기록을 제거하고 출력을 한 뒤 COUNT 해야하는 것이었습니다.
이는 굉장히 중요한 개념인 것 같습니다.
세어서는 안 될 데이터가 포함돼
데이터 갯수가 불가피하게 많아진다면
큰 오류가 발생할 수도 있으니까요!!
분석하면서 신경써야 할 부분이기 때문에
다시 한 번 상기하고
실전에서 응용할 수 있도록 연습을 꾸준히 하겠습니다!!

'-- Data -- > - SQL -' 카테고리의 다른 글
[ Oracle ] CHR()로 문자 나타내기 (0) | 2023.09.15 |
---|---|
[ Oracle ] FETCH를 사용한 상위 3개 날짜 추출 (0) | 2023.08.16 |
[ Oracle ] 프로그래머스 코테 GROUP BY, 카테고리 별 도서 판매량 집계하기 (0) | 2023.06.30 |
[ Oracle ] RANK() OVER를 사용해 정보가 많은 순으로 순위 매기기 (0) | 2023.06.14 |
[ Oracle ] TRUNC() 함수를 이용한 숫자 GROUPING (0) | 2023.06.09 |