팀원 공통 인사이트
좋은 데이터 분석을 위해 하드스킬 뿐 아니라 소프트스킬도 잘 챙기자!
SELECT o.user_id,
SUM(o.price) AS oct_price,
SUM(n.price) AS nov_price,
SUM(d.price) AS dec_price,
SUM(j.price) AS jan_price,
SUM(f.price) AS feb_price
FROM team.`2019_oct` o
LEFT JOIN team.`2019_nov` n ON o.user_id = n.user_id
LEFT JOIN team.`2019_dec` d ON o.user_id = d.user_id
LEFT JOIN team.`2020_jan` j ON o.user_id = j.user_id
LEFT JOIN team.`2020_feb` f ON o.user_id = f.user_id
WHERE o.event_type = 'purchase'
GROUP BY user_id
UNION ALL 사용
SELECT user_id,
SUM(price) AS total_price,
COUNT(*) AS cnt_total
FROM
(
SELECT user_id, price FROM team.`2019_oct` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2019_dec` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2019_nov` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2020_jan` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2020_feb` WHERE event_type = 'purchase'
) purchases
GROUP BY user_id
ORDER BY total_price DESC, cnt_total DESC
분류 시작
→ 1점~ 5점으로 점수 매긴다고 생각하고 각 5개 그룹으로 분류
a) 쿼리 짜기
SELECT user_id,
total_price,
CASE WHEN sub.total_price > 2500 THEN '5점'
WHEN sub.total_price > 2000 THEN '4점'
WHEN sub.total_price > 1500 THEN '3점'
WHEN sub.total_price > 1000 THEN '2점'
WHEN sub.total_price > 500 THEN '1점'
ELSE '0점'
END AS '구매금액점수',
cnt_total,
CASE WHEN sub.cnt_total > 500 THEN '5점'
WHEN sub.cnt_total > 400 THEN '4점'
WHEN sub.cnt_total > 300 THEN '3점'
WHEN sub.cnt_total > 200 THEN '2점'
WHEN sub.cnt_total > 100 THEN '1점'
ELSE '0점'
END AS '구매횟수점수'
FROM
(
SELECT user_id,
SUM(price) AS total_price,
COUNT(*) AS cnt_total
FROM
(
SELECT user_id, price FROM team.`2019_oct` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2019_nov` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2019_dec` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2020_jan` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2020_feb` WHERE event_type = 'purchase'
) purchases
GROUP BY user_id
)sub
b) 구매금액점수 + 구매횟수점수 / 점수 5점 이상 쿼리
SELECT user_id,
total_price,
구매금액점수,
cnt_total,
구매횟수점수,
구매금액점수 + 구매횟수점수 AS 합계점수
FROM
(
SELECT user_id,
total_price,
CASE WHEN sub.total_price > 2500 THEN '5'
WHEN sub.total_price > 2000 THEN '4'
WHEN sub.total_price > 1500 THEN '3'
WHEN sub.total_price > 1000 THEN '2'
WHEN sub.total_price > 500 THEN '1'
ELSE '0'
END AS '구매금액점수',
cnt_total,
CASE WHEN sub.cnt_total > 500 THEN '5'
WHEN sub.cnt_total > 400 THEN '4'
WHEN sub.cnt_total > 300 THEN '3'
WHEN sub.cnt_total > 200 THEN '2'
WHEN sub.cnt_total > 100 THEN '1'
ELSE '0'
END AS '구매횟수점수'
FROM
(
SELECT user_id,
SUM(price) AS total_price,
COUNT(*) AS cnt_total
FROM
(
SELECT user_id, price FROM team.`2019_oct` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2019_nov` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2019_dec` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2020_jan` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2020_feb` WHERE event_type = 'purchase'
) purchases
GROUP BY user_id
)sub
)sub2
ORDER BY 합계점수 DESC
LIMIT 31; -- 5점 이상 인원
c) 여기서 vip 인원들 ID만 뽑아서 원본 데이터랑 연결을 해야하는데 도저히 방법이 생각 안 나서 소현 튜터님 찾아감
WITH 구문 쓰면 간단하게 끝날 수 있다고 속성으로 강의까지 해주셨는데, 도저히 못 짜겠다
위에 쓰는 것까진 했는데 WITH에서 사용한 alias로 추출할 수가 없음!🥲
두 번째로 찾아갔을때 UNION ALL 부분만 올리고 나머지 부분을 JOIN이나 서브쿼리로 엮어보라고 하셨는데 아직도 방법을 못 찾았다 여기서부터 멘붕의 시작
WITH purchases AS (
SELECT user_id, price FROM team.`2019_oct` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2019_nov` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2019_dec` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2020_jan` WHERE event_type = 'purchase'
UNION ALL
SELECT user_id, price FROM team.`2020_feb` WHERE event_type = 'purchase'
),
user_data AS (
SELECT user_id,
SUM(price) AS total_price,
COUNT(*) AS cnt_total
FROM purchases
GROUP BY user_id
),
scores AS (
SELECT user_id,
total_price,
cnt_total,
CASE
WHEN total_price > 2500 THEN 5
WHEN total_price > 2000 THEN 4
WHEN total_price > 1500 THEN 3
WHEN total_price > 1000 THEN 2
WHEN total_price > 500 THEN 1
ELSE 0
END AS 구매금액점수,
CASE
WHEN cnt_total > 500 THEN 5
WHEN cnt_total > 400 THEN 4
WHEN cnt_total > 300 THEN 3
WHEN cnt_total > 200 THEN 2
WHEN cnt_total > 100 THEN 1
ELSE 0
END AS 구매횟수점수
FROM user_data
),
vvip AS (
SELECT user_id
FROM scores
ORDER BY (구매금액점수 + 구매횟수점수) DESC
LIMIT 31
)
SELECT *
FROM vvip
4) 조원인 혜령님이 3-b 코드로 데이터를 추출해서 거기서 그냥 다시 쿼리 돌려보는 게 어떻겠냐고 하셔서, 그렇게 하기로 일단은 결정했다🥴
내가 초기 쿼리를 짜 줘야 조원들도 쿼리를 돌릴 수 있어서 빨리 해야 했었는데 그게 안(못) 돼서 너무너무 속상했따 얼른 하고 개인 스터디도 하고 싶었는데 계획한 걸 하나도 하지 못했음
내일은 세부 쿼리 짜는 거 함께 할 예정..🤐
이번 주 정말 힘들군요
python - 평균 구하기
python - 짝수와 홀수
SQL - 여러 기준으로 정렬하기
SQL - 이름에 el이 들어가는 동물 찾기
코드카타 11-12✅
코드카타 11-12✅
쿼리짜기/방향설정✅
2주차 완강❌
8주차 복습❌
하루종일 기초분석 코드 짜는 거에만 매달린 것 같은데 진도도 안 나가고 머리도 안 돌아간다 어쩜 이럴수가
게다가 과제 관련 이런저런 혼선이 있어서 전체적으로 혼란스러웠다 흑흑
SQL 쉽다고 생각했는데 확실히 실제 데이터에 접근하는 건 다른 문제라는 걸 다시금 깨달음 쥐엔장
원래는 풀어야 할 문제를 제시해주고 거기에 대한 답을 써내려가는 거여서 답이 정해져 있다 보니 쉬웠는데, 기초분석 과제는 답을 만들어야 하는 거다 보니 .. . .. 수동적 교육의 어쩌고..
스스로의 부족함에 이마 빡빡 때림
내일은 뭐라도 결과물이 나와야할텐데 걱정이 된다
그리고 점점 개인공부할 시간이 없는 것 같아서 자격증 시험 접수해놓은 걸 취소할까 생각중
잘 할 수 있겠지? 파이팅 🤣🍀🍀🍀