-- select -- kor_name,total, -- case -- when total >= 501 then 'High' -- when total <= 300 then 'Low' -- else 'Medium' -- end as total_rank -- from `basic.pokemon` 저는 High와 Low 범위를 정해놓고 나머지를 Medium 으로 Else에 넣었는데 이렇게 해도 될까요?
데이터 검증 강의에 대한 내용은 감명깊게 수강하였고, 강의의 쿼리 외적으로 질문이 있습니다ㅎㅎ 저는 이 강의의 문제만 보고 빅쿼리에서 스스로 문제 풀기를 3일간 도전하였는데, 결국 풀지 못한 채 강의를 보게 되었습니다! 제 사고 과정은 다음과 같습니다. 1. 총 배틀 횟수 계산이 난해하다. 2. '각 트레이너'의 정보를 얻으려면 battle 테이블과 trainer 테이블을 조인하여 t.trainer_id = b.player_id를 확인해야 할 것으로 예상된다. 3. trainer 테이블을 기준으로 battle 테이블을 LEFT JOIN 한다. 그런데 강의 03:57 ~ 04:03 부분을 확인해보니, player_id를 기준으로 trainer_id를 매핑시키는 방식의 쿼리를 작성하셨더라고요! Q. 제가 최초에 trainer_id 컬럼을 기준 삼았다고 가정할 때, trainer_id = player_id 이 불편함을 깨닫고 player_id = trainer_id 으로 관점을 바꾸면 좋겠다고 생각할 근거가 있다면 무엇일지 궁금합니다..! 나름 최선의 표현으로 글을 다듬었지만, 이 질문이 난해할 수 있다고 생각하고요..! 원하는 답을 얻지 못할 확률이 높다고 생각하면서도 혹시나 하여 질문드립니다. 감사합니다!
퍼널 분석을 통한 Foodie Express의 비즈니스 인사이트를 도출하는 레포트를 작성하였습니다. 아래의 노션 링크 첨부하여 드립니다. 감사합니다. https://app.notion.com/p/6-1-3a96c0de4db680fda4d5f30c3ecc0b43?source=copy_link
안녕하세요. 리텐션 과제 제출합니다. 실무 기반의 문제라 그런지 역시 난이도가 있네요. 고민을 많이 해보게 되었습니다. 리텐션 유저 기준은 게임 업계 기준으로 정의하고 문제를 풀었습니다. (플랫폼에 따라서 기준도 다르고 하지만) 보시고 피드백 있으시면 말씀을 부탁드리겠습니다. https://app.notion.com/p/2b00de0d9a16809f94f5e378ee375b2f?source=copy_link
해당 리텐션 연습과제를 아래의 노션 링크에 담아 제출합니다. 2번과 3번과제는 너무 어려워서 AI의 도움을 받아 수행하였습니다. 많이 고민하는 계기가 되었고, 덕분에 노션도 처음 사용해보았습니다. 부족한 점은 없는지 피드백 주시면 감사하겠습니다. https://app.notion.com/p/3-13-3986c0de4db68063b1b9efa55c1d4b4f?source=copy_link
안녕하세요 강사님! 최종 과제 피드백 요청 드립니다🙇♀️ 로그 데이터 분석이 처음이라 데이터 해석부터 분석 스킬까지 부족한 점이 많습니다! 하지만, 강사님께서 처음부터 이해하기 쉽게 알려주신 덕분에 많이 배울 수 있었습니다. 저는 현재 CRM 마케터를 희망하고 있어, CRM 개선 전략을 목표로 분석을 진행해보았습니다. 바쁘시겠지만 피드백 주시면 앞으로의 역량 강화에 큰 도움이 될 것 같습니다 :) 감사합니다~! 과제 링크
--Weekly Retention WITH base AS( SELECT user_pseudo_id, event_name, DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date, DATE_TRUNC(DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), WEEK(MONDAY)) AS event_week, FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2022-11-03' ), first_week_data AS( #first_week 추출 SELECT DISTINCT user_pseudo_id, event_week, MIN(event_week) OVER(PARTITION BY user_pseudo_id) AS first_week, FROM base ), week_diff_user_cnt_data AS( #week_diff 및 user_cnt 추출 SELECT week_diff, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM( SELECT *, DATE_DIFF(event_week, first_week, WEEK(MONDAY)) AS week_diff FROM first_week_data ) GROUP BY week_diff ) #first_week_user_cnt 및 retention_ratio 추출 SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_week_user_cnt), 3) AS retention_rate FROM( SELECT *, FIRST_VALUE(user_cnt) OVER(ORDER BY week_diff) AS first_week_user_cnt FROM week_diff_user_cnt_data ) ORDER BY week_diff --Monthly Retention WITH base AS( SELECT user_pseudo_id, event_name, DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_date, DATE_TRUNC(DATE(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul'), MONTH) AS event_month, FROM advanced.app_logs WHERE event_date BETWEEN '2022-08-01' AND '2022-11-03' ), first_month_data AS( #first_month 추출 SELECT DISTINCT user_pseudo_id, event_month, MIN(event_month) OVER(PARTITION BY user_pseudo_id) AS first_month, FROM base ), month_diff_user_cnt_data AS( #month_diff 및 user_cnt 추출 SELECT month_diff, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM( SELECT *, DATE_DIFF(event_month, first_month, MONTH) AS month_diff FROM first_month_data ) GROUP BY month_diff ) #first_month_user_cnt 및 retention_ratio 추출 SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_month_user_cnt), 3) AS retention_rate FROM( SELECT *, FIRST_VALUE(user_cnt) OVER(ORDER BY month_diff) AS first_month_user_cnt FROM month_diff_user_cnt_data ) ORDER BY month_diff 더 보완할 점은 없는지 평가해 주시면 감사하겠습니다. 강의 항상 정말 잘 듣고있습니다.
질문이 있는 경우 다음과 같이 시도해보고 공유해주세요 구글에 검색한 후, 어떤 결과가 나왔는지 그 결과를 토대로 어떤 시도를 했는지? 시도에서 어떤 과정이 진행되지 않았는지 데이터를 추출하는 과정에 대한 고민은 Input / Output을 작성해주세요 안녕하세요. 해당 강의를 google cloud가 아니라 vs code에서 해볼 수 있는 방법은 없을까요?
안녕하세요, 처음 인사드립니다! 분석 내용을 정리하다 보니 분량이 길어져 부득이하게 아래와 같이 3개의 페이지로 나누어 작성하였습니다. Food Express DAU·WAU·MAU 및 시간대별 패턴 분석 Food Express 퍼널 분석 Food Express 리텐션 및 코호트 분석 전체적인 흐름은 시계열 관점에서 DAU·WAU를 통해 전반적인 추세를 먼저 파악한 뒤, 퍼널 분석과 리텐션 분석으로 확장하는 방식 으로 구성하였습니다. 해석 과정에서는 가능한 한 개인적인 추측이나 과도한 주관을 배제하고, 데이터 기반으로 내용을 정리하고자 노력하였습니다. 아직 많이 부족하지만, 분석 기법의 적절성이나 논리 전개의 타당성 측면에서 보완이 필요한 부분이 있다면 편하게 조언해주시면 감사하겠습니다. https://www.notion.so/3097a7fdec7f802ca46cf2a615b3fc97?source=copy_link
안녕하세요 JOIN 연습문제 1번에 대해서 질문이 있습니다 SELET kor_name, COUNT( tp.id ) AS pokemon_cnt 와 SELET kor_name, COUNT( p.id ) AS pokemon_cnt 출력되는 행의 개수는 똑같은데 tp.id 를 쓰는 것과 p.id를 쓸 때 해석 차이가 무엇인지, 연습 문제가 아닌 실무에서 똑같은 상황일 때 p.id를 사용하면 어떤 문제가 발생하는지, 연습 문제처럼 COUNT로 집계 할 때 보통 어떤 테이블의 id를 COUNT 하는 것이 보편적인지 궁금합니다. SELECT kor_name, COUNT(tp.id) AS pokemon_cnt FROM( SELECT id, trainer_id, pokemon_id, status FROM basic.trainer_pokemon WHERE status IN("Active","Training") ) AS tp LEFT JOIN basic.pokemon AS p ON tp.pokemon_id = p.id GROUP BY kor_name ORDER BY 2 DESC
안녕하세요. 이전 질문에 대한 답변 감사합니다. type1을 기준으로 해서 4번 문제를 풀었는데요. 저는 trainer 테이블을 기준으로는 achivement_level = "Master"라는 조건이 있고, trainer_pokemon 테이블에서는 status IN ("Active", "Training")이라는 조건이 있으니 먼저 두 테이블을 이렇게 가공한 후에 JOIN하면 좋지 않을까? 라는 생각으로 아래와 같이 쿼리를 작성했어요. SELECT p.type1, COUNT(tp.id) type_cnt FROM (SELECT * FROM basic.trainer WHERE achievement_level = "Master") t LEFT JOIN (SELECT * FROM `basic.trainer_pokemon` WHERE status IN ("Active", "Training")) tp ON t.id = tp.trainer_id LEFT JOIN `basic.pokemon` p ON tp.pokemon_id = p.id GROUP BY p.type1 ORDER BY type_cnt DESC LIMIT 1 그런데 풀이에서는 trainer_pokemon 테이블만 status 기준으로 가공한 후, 나머지 테이블을 JOIN하고 -> 마지막에 WHERE 조건으로 achivement_level = "Master" 를 걸어서 데이터를 추리는 것 같더라고요. 현재 데이터 기준으로는 일단 값이 같지만, 뭔가 이 선후관계에 따라서 무언가가 달라질 수도 있을 것 같은데 명확하게 알기가 어려워 질문 드립니다! 확인 부탁 드립니다 :)