| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- SolveSQL
- advent of sql
- 프로그래머스
- funnel
- regexp
- 그로스해킹
- python
- MYSQL
- pandas
- dense_rank
- LEFTJOIN
- 서브쿼리
- 순위함수
- 린분석
- 데이터리안
- Retention
- 누적합
- 신입 데이터분석가
- 데이터분석
- row_number
- 리텐션
- leetcode
- 퍼널분석
- rank
- 윈도우 함수
- 독서
- Datarian
- 취준
- SQL
- 윈도우함수
- Today
- Total
목록전체 글 (109)
데이터 분석
문제 상황22년 7월에 새로운 프로모션 캠페인을 시작했다.이에 7월 한 달간 진행되는 프로모션 캠페인의 일별 참여 추이를 모니터링하려 한다.그중 22년 7월 24일 ~ 31일 기간의 각 일 running MAU를 계산할 예정이다. 특정일의 running MAU 지표는 아래와 같이 정의: 특정일이 포함된 월의 1일 ~ 특정일까지 '접속'한 unique 유저수 사용한 데이터는 아래와 같다. SolutionSELECT DATE_FORMAT(d.d_ts, '%Y-%m-%d') AS d_date , COUNT(DISTINCT l.user_id) AS running_mauFROM date_list d LEFT JOIN login_logs l ON l.login_time >= DATE_FORMAT(d...
문제 상황 22년 1월에 신규 서비스를 론칭했다. 이 서비스의 매월 MAU를 아래의 4가지 유저타입으로 breakdown 할 예정이다.한 유저의 유저타입은 매월 바뀔 수 있으며, MAU가 된 각 월이 유저타입 분류 기준이 된다. A : 해당 월에 처음 MAU가 된 유저B : 해당 월 기준으로 전월, 전전월 모두 MAU인 유저C : 전월에도 MAU였지만 전전월에는 MAU가 아닌 유저D : 해당 월에 신규 MAU가 아니면서, 전월에 MAU가 아닌 유저 아래와 같은 포인트들을 갖고 접근하기 시작했다.✅신규 서비스를 1월에 론칭했다면, 1월 MAU에는 A 유저타입만 있겠구나!✅2월 MAU에는 B 유저타입은 존재할 수 없겠다! 2월은 A, C✅D 유저타입은 복귀 유저를 의미하겠구나! 사용 데이터는 아래와 같다...
기본 계산의 의미와 동작 방식 '기본 계산'은 데이터 원본에 대한 행 수준 계산 및 집계 계산을 의미한다. 1) Row-Level Calculation (행 수준 계산): 데이터 원본의 행 수준에서 계산 (예시) SPLIT 함수를 이용한 계산된 필드를 활용하여 고객명에서 First Name 값을 추출한 예시이다. 2) Aggregate Calculation (집계 계산): 데이터를 집계하여 계산 (예시) 고객 세그먼트 별 중복 없이 고유한 Customer Name 값을 집계한 예시이다. 기본 계산의 종류 1) 숫자 함수 : 필드의 데이터 값에 대한 계산 수행 및 숫자값을 포함하는 필드에서만 사용 가능(e.g. ABS(), CELING(), FLOOR(), ROUND(), ZN()) (예시)ZN..
문제 상황 특정 기간 후 이탈률이 높아지는 지점을 식별하여 집중적인 고객 관리 전략을 수립하기 위한 비즈니스 시나리오를 가정하고, 유저들의 첫번째 주문일을 기준으로 코호트를 나눈 후 유저의 첫 번째 주문 이후의 주문 리텐션을 계산해 보았다. 단, 한 유저가 같은 날 여러 건의 주문을 했을 경우 하루에 한 건으로 집계한다. SolutionWITH step1 AS ( SELECT r.* , c.first_order_date , DATEDIFF(r.order_date, c.first_order_date) AS day_diff FROM records r JOIN customer_stats c ON r.customer_id = c.customer_id)SELECT first_orde..
문제 상황 고객별 인기 상품 정보를 바탕으로 교차 판매 및 상향 판매 전략을 수립하기 위한 비즈니스 시나리오를 가정하고, 1분기 동안의 고객별 인기 상품 Top3을 조회해 보았다. 단, 주문 수량이 10/9/9/8였다면 상위 주문 수량 3개는 10/9/8 이므로 총 4개의 상품명을 출력한다. SolutionWITH step1 AS ( SELECT customer_id , product_name , SUM(quantity) AS total_quantity FROM records WHERE order_date BETWEEN '2020-01-01' AND '2020-03-31' GROUP BY customer_id, product_name), step2 AS ( SELECT * ..
문제 상황 solvesql의 플레이그라운드 서비스는 사용자가 원하는 데이터베이스를 선택하여 자유롭게 분석해 볼 수 있는 환경을 제공한다. 이에 나는 매출 기여도가 높은 카테고리를 식별하여 이에 대한 재고 관리를 더욱 철저히 하고자 하는 비즈니스 시나리오를 가정하고, 이를 위해 카테고리별 매출액, 총매출액, 차지하는 비율을 집계해 보았다. SolutionSELECT DISTINCT category , SUM(sales) OVER (PARTITION BY category) AS sales_category , SUM(sales) OVER () AS sales_total , ROUND(SUM(sales) OVER (PARTITION BY category) / SUM(sales) OVER ..
1. 차원과 측정값 '차원'은 범주형 데이터와 같이 나눠서 볼 기준, '측정값'은 수치형 데이터를 의미한다. '차원' : 더했을 때 말이 안 되면 차원 (e.g. 날짜, 이름, id)'측정값' : 더했을 때 말이 되면 측정값 (e.g. 매출, 수익, 배송비) 💡차원과 측정값은 함께할 때 인사이트가 생긴다. 측정값은 그 자체만으로는 인사이트가 없으며 차원으로 쪼개지며 의미를 가짐. (예시)✅ 열선반(x축)과 행선반(y축)에 각각 측정값 Sales, Profit 변수를 넣었을 때 태블로는 기본적으로 측정값을 집계한다. 따라서 쪼갤 기준이 없기 때문에 1개 마크만 표시된 것을 확인할 수 있다. ✅ 열선반과 행선반에 각각 측정값 Sales, Profit 변수를 넣었을 때 + 세부정보에 차원 Customer ..
문제 Write a solution to find for each user, the join date and the number of orders they made as a buyer in 2019. 💡이 문제의 핵심은 JOIN과 LEFT JOIN의 특징을 정확히 알고, 적절한 조인 조건을 활용하는 것이다. SolutionSELECT u.user_id AS buyer_id , u.join_date , COUNT(CASE WHEN o.order_date LIKE '2019%' THEN o.order_id END) AS orders_in_2019 -- NULL은 COUNT 시 0FROM Users u LEFT JOIN Orders o ON u.user_id = o.buyer_idGROU..
문제 Write a solution to display the records with three or more rows with consecutive id's, and the number of people is greater than or equal to 100 for each. Return the result table ordered by visit_date in ascending order. 'id'가 연속적인 세 개 이상의 행을 찾되, 각 행의 'people'값이 100 이상인 경우에 해당하는 레코드를 출력하는 문제이다. 💡연속적이라는 단서를 보면 self-join을 통해 접근해 보자! Solution (1) ✔️ Stadium 테이블을 셀프 조인하여 세 개의 연속된 id 확인SELECT *F..
문제Write a solution to report the Capital gain/loss for each stock. The Capital gain/loss of a stock is the total gain or loss after buying and selling the stock one or many times. Return the result table in any order. 주식에 대한 각 'Sell' 작업은 이전 날에 해당하는 'Buy' 작업이 반드시 존재한다. 이 점을 참고하여, 하나의 주식을 한 번 또는 여러 번 사고판 후의 총 이익 또는 손실을 계산한다. SolutionSELECT stock_name , SUM(CASE WHEN operation = 'Buy' then -p..