참고자료 - 사용자 행동 분석방법 7가지
참고자료2 - 이커머스 데이터 분석 유형 5가지
결론적으로는 목표를 [vip 사용자 이탈 막기] 를 주제로 잡고 각자 요리조리 데이터 만져와보기로 함
vip의 기준도 모호한 것 같아서 기준도 생각해보기로 했다.
1과목 : 데이터 모델링의 이해
2과목 : SQL 기본 및 활용
합격 기준 : 총 60점 이상
과락 기준 : 과목별 40% 미만
취득 후 1.5년 지난 시점에 보수 교육(온라인 강의) 수강 시 영구 취득 전환
ORACLE(+ SQL SERVER) 기반 출제
SQL(Structured Query Language)은 데이터베이스를 직접적으로 액세스할 수 있는 언어
각각의 DBMS마다 사용하는 SQL이 조금씩 다름
큰 골자는 비슷하나 디테일에서의 차이
표준 SQL을 준수 + 커스텀
문제1 - 조건절 where 구문의 활용
select game_account_id, game_actor_id, serverno
from basic.users a
where first_login_date >'2023-01-01'
문제2 - 조건절 where 구문의 응용
내가 작성한 코드
SELECT first_login_date,
ip_addr,
exp,
zone_id
FROM users u
WHERE `level` > 10
AND (serverno != 1)
AND (etc_str2 = '시즌패스' OR etc_str2 = '레벨업 패키지')
AND (etc_str1 = '상점에서 구매')
ORDER BY first_login_date DESC
;
정답코드
select first_login_date, ip_addr, exp, zone_id
from basic.users
where (level>10)
and (serverno!=1)
and (etc_str2 in ('레벨업 패키지', '시즌패스'))
and (etc_str1='상점에서 구매')
order by first_login_date, ip_addr desc
;
IN을 기억하자!✅✅✅
문제3 - 조건절 case when 구문의 활용
내가 작성한 코드
SELECT game_actor_id,
`level`,
CASE WHEN `level` BETWEEN 1 AND 10 THEN '1~10Lv 이하'
WHEN `level` BETWEEN 11 AND 20 THEN '11~20Lv 이하'
WHEN `level` BETWEEN 21 AND 30 THEN '21~30Lv 이하'
WHEN `level` BETWEEN 31 AND 40 THEN '31~40Lv 이하'
WHEN `level` BETWEEN 41 AND 50 THEN '41~50Lv 이하'
WHEN `level` BETWEEN 51 AND 60 THEN '51~60Lv 이하'
WHEN `level` BETWEEN 61 AND 70 THEN '61~70Lv 이하'
WHEN `level` BETWEEN 71 AND 80 THEN '71~80Lv 이하'
WHEN `level` BETWEEN 81 AND 90 THEN '81~90Lv 이하'
ELSE '91~100Lv'
END 'levelgroup',
first_login_date
FROM users
ORDER BY first_login_date DESC
;
정답코드 1
select game_actor_id, level,
case when level <=10 then '1~10Lv 이하'
when level <=20 then '11~20Lv 이하'
when level <=30 then '21~30Lv 이하'
when level <=40 then '31~40Lv 이하'
when level <=50 then '41~50Lv 이하'
when level <=60 then '51~60Lv 이하'
when level <=70 then '61~70Lv 이하'
when level <=80 then '71~80Lv 이하'
when level <=90 then '81~90Lv 이하'
else '91~100Lv' end as levelgroup, first_login_date
from basic.users
order by first_login_date desc
CASE WHEN 절에서 먼저 걸린 조건1level <= 10을 먼저 필터링 하고 조건2 level <=20으로 넘어간다는 걸 한번 더 짚어주셨음
BETWEEN을 사용해도 괜찮으나 굳이 복잡해질 필요가 없음!✅✅✅
+) level 자동으로 변환이 돼서 일종의 예약어인지 여쭤봤었는데, 좋은 질문이라고 해주셨다! 😎 낄낄

| 집계함수 | 기능 |
|---|---|
| COUNT | 테이블의 행 수 반환 |
| SUM | 테이블의 열 합계 반환 |
| AVG | 테이블의 열 평균 반환 |
| MIN | 테이블의 열 최소값 반환 |
| MAX | 테이블의 열 최대값 반환 |
#1. 전체 데이터 갯수 세기
select count(*)as cnt
from basic.theglory
#2. 전체 데이터 평균 나이 구하기
select avg(나이)as avg_age
from basic.theglory
#3. 전체 데이터 최대 나이 구하기
select max(나이)as max_age
from basic.theglory
#4. 전체 데이터 최소 나이 구하기
select min(나이)as max_age
from basic.theglory
#5. 전체 데이터 나이합계 구하기
select sum(나이)as sum_age
from basic.theglory
#6. 여러 집계함수의 사용
select count(*)as cnt
, avg(나이)as avg_age
, max(나이)as max_age
, min(나이)as min_age
, sum(나이)as sum_age
from basic.theglory
집계함수에 그룹(기준)이 더해진 개념
특정 컬럼을 기준으로 데이터를 요약해서 비교하고 싶을때 사용
# 집계함수와 GROUP BY 절을 함께 사용하는 SQL문
select 기준컬럼, 집계함수(조건컬럼을 기준으로 여러개의 집계함수 동시사용 가능)
from 테이블명
where 조건 #(생략가능)
group by 기준컬럼
;
# 주의)기준컬럼과 집계함수를 작성하고 GROUP BY 절을 사용하지 않을 때 에러가 발생하는 예
select 기준컬럼, 집계함수(조건컬럼을 기준으로 여러개의 집계함수 동시사용 가능)
from 테이블명
where 조건 #(생략가능)
;
1️⃣SELECT 뒤 기준컬럼(나라, 성별, 레벨..등등) 작성
2️⃣ 집계함수(COUNT, MAX, MIN, AVG, SUM) 작성
3️⃣ WHERE 절 뒤 GROUP BY 기준컬럼 작성 (WHERE 절은 생략 가능합니다.)
주의할 점
1️⃣, 2️⃣번 작성 후, 3️⃣번을 작성하지 않을 경우 에러가 발생됩니다.
그 이유는, 데이터를 SELECT할 때, 2️⃣번 집계함수는 여러 데이터로부터 하나의 행을 반환하지만, 1️⃣번 기준컬럼은 N 개의 값을 반환하기 때문에, 3️⃣번 GROUP BY 절을 사용하여 기준컬럼 당 값 1개를 반환 할 수 있도록 명시해야 합니다.
✨참고) 작동순서: FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY
WHERE절은 GROUP BY전 데이터 기준으로 필터링
HAVING절은 GROUP BY후 결과값을 기준으로 필터링
# 집계함수, GROUP BY절, HAVING을 함께 사용하는 SQL문
select 기준컬럼, 집계함수(조건컬럼을 기준으로 여러개의 집계함수 동시사용 가능)
from 테이블명
where 조건 #(생략가능) 1️⃣
group by 기준컬럼 2️⃣
having 조건식 3️⃣
;
컬럼들을 활용한 많은 연산(사칙, 집계, 윈도우 함수, 포맷팅)을 하는 경우, SUB QUERY 는 이를 순차적(구조적)으로 기록하는 역할을 수행
서브쿼리(안쪽에 위치한 쿼리) → 메인쿼리(바깥쪽에 위치한 쿼리) 순으로 실행
() 안에 SELECT FROM 반드시 명시
서브쿼리 마지막에 ; 기호 사용 불가
ORDER BY 사용 불가
예시

✅ 보라색 괄호 → 노란색 괄호 순으로 처리
가장 많이 사용✅문제 1 - 집계함수의 활용
조건1) 서버별, 월별 게임계정id 수를 중복값 없이 추출해주세요. 월은 첫 접속일자를 기준으로 계산해주세요. 월은 yyyy-mm의 형태로 추출해주세요.
SELECT SUBSTR(first_login_date, 1, 7) AS login_month,
serverno,
count(DISTINCT game_account_id) AS cnt_account
FROM basic.users
GROUP BY SUBSTR(first_login_date, 1, 7),
serverno;
문제 2 - 집계함수와 조건절의 활용
조건1) group by 를 활용하여 first_login_date별 게임캐릭터수를 중복값 없이 구하고,
조건2) having 절을 사용하여 그 값이 10개를 초과하는 경우의 첫 접속일자 및 게임캐릭터id 개수를 추출해주세요.
SELECT first_login_date,
COUNT(DISTINCT game_actor_id) AS cnt_actor_id
FROM basic.users
GROUP BY first_login_date
HAVING cnt_actor_id > 10;
문제 3 - 집계함수와 조건절의 활용2
조건1) group by 절을 사용하여 서버별, 유저구분(기존/신규) 게임캐릭터id수를 구해주세요. 중복값을 허용하지 않는 고유한 갯수로 추출해주세요.
조건2) 기존/신규 기준→ 첫 접속일자가 2024-01-01 보다 작으면(미만) 기존유저, 그렇지 않은 경우 신규유저
조건3) 또한, 서버별 평균레벨을 함께 추출해주세요.
SELECT serverno,
CASE WHEN first_login_date < '2024-01-01' THEN '기존유저'
ELSE '신규유저'
END AS 'usergroup',
COUNT(DISTINCT game_actor_id) AS cnt_actor_id,
AVG(`level`) AS avg_level
FROM basic.users
GROUP BY serverno, usergroup;
문제 4 - SubQuery의 활용
2번 문제를 having 이 아닌 인라인 뷰 subquery 를 사용하여, 추출해주세요.
조건1) 문제2번을 having 이 아닌 인라인 뷰 서브쿼리를 사용하여 추출해주세요.
SELECT first_login_date,
cnt_actor_id
FROM
(
SELECT first_login_date,
COUNT(DISTINCT game_actor_id) AS cnt_actor_id
FROM basic.users
GROUP BY first_login_date
) AS subquery
WHERE cnt_actor_id > 10ㅔ
문제 5 - SubQuery의 응용
조건1) 레벨이 30 이상인 캐릭터를 기준으로, 게임계정 별 캐릭터 수를 중복값 없이 추출해주세요.
조건2) having 구문을 사용하여 캐릭터 수가 2 이상인 게임계정만 추출해주세요.
조건3) 인라인 뷰 서브쿼리를 활용하여 캐릭터 수 별 게임계정 개수를 중복값 없이 추출해주세요.
SELECT cnt_actor_id,
COUNT(DISTINCT game_account_id) AS cnt_account_id
FROM
(
SELECT game_account_id,
COUNT(DISTINCT game_actor_id) AS cnt_actor_id
FROM basic.users
WHERE `level` >= 30
GROUP BY game_account_id
HAVING cnt_actor_id >= 2
)subquery
GROUP BY cnt_actor_id
SQL - 최솟값 구하기
SQL - 어린 동물 찾기
Python - 짝수의 합
Python - 배열의 평균값
ADSP 8주차 복습❌
시험 치고 왔다고 이렇게 다시 보기 싫을 일이야?
단순 보기 싫은 게 전부는 아니지만 흑흑
기초분석 관련 자료 넣고 이것저것 찾아보느라 시간을 많이 보내버렸다 내일은 꼭!
SQLD 1주차✅
이미 SQL 코드카타도 하고 있고 이론적인 부분은 크게 신경 쓸 일 없을 거라 생각했는데 이것도 만만치 않은 시험이구나 생각했다 얘는 바로 코앞에 닥쳤을때 하지 말고🤣 지금부터 기출 풀어봐야지! 책 사고 자료 인쇄하기 !
SQL 코드카타 9-10✅ 숙제제출✅
SQL이 진짜 나랑 잘 맞나..? 어려운 부분 없었다 아EZ요
Python 코드카타 9-10✅
간단한 문젠데 어렵게 생각하지 말 것! EZ ..는 아니고 E..요..
기초분석스터디 주제선정참여✅
조장님이 오늘 안 계셔서 얘기의 방향을 잡는 것이 꽤나 힘들었다 조장의 길은 어렵구나
2주차부터 덜컥 몬가 본격적인 과제가 나온 것 같아서 당황했쥐만..? 어케 보면 바로 실무에 투입될 수 있게 사고력을 길러주는 것 같아서 굉장히 재밌다
DB 테이블 불러오는 것에 좀 애먹었는데 무아튜터님께 가니 바로 해결해주셨다. 쏘 카인드. 감사합니다!
이제 여태까지 배운 쿼리를 열심히 요리조리 써먹어볼 차례다😗 내일까지 한번 잘 고민해봐야지!