안녕하세요 카일님, 잘 듣고 있습니다. 강의 말미에서 app logs 데이터로 쿼리 연습 해보라고 말씀주셔서 아래와 같이 몇 가지 연습해 보았습니다. 더 정확한, 효율적인 쿼리가 있는지, 틀린 부분이 있다면 피드백 부탁드립니다. 1. Screen 탐색량이 가장 많은 유저 찾기 질문: 어떤 유저가 앱 내 screen을 가장 많이 탐색했는가? 목적: 유저별 screen 조회 횟수를 집계하여 heavy user 탐색. SELECT user_id, -- IF(event_params.key="firebase_screen", event_params.value.string_value, null) as screen, COUNT(*) as cnt_screen FROM advanced.app_logs CROSS JOIN UNNEST(event_params) as event_params WHERE event_params.key='firebase_screen' GROUP BY ALL HAVING user_id is not null ORDER BY cnt_screen DESC 2. 날짜별 Screen 조회량 및 Screen 구성 질문: 날짜별 전체 screen 조회량은 어떻게 변화하며, 각 screen은 얼마나 조회되었는가? 목적: Screen View의 시계열 변화와 screen별 조회량을 동시에 분석. double check 컬럼을 통해 정의한 screen들의 합계도 검증. WITH unnest_table as ( SELECT *, IF(event_params.key="firebase_screen", event_params.value.string_value, null) as screen FROM advanced.app_logs CROSS JOIN UNNEST(event_params) as event_params GROUP BY ALL HAVING screen is not null) SELECT event_date, count(screen) as total_screen_view, COUNTIF(screen IN ('cart','welcome', 'food_category', 'home', 'search_result', 'food_detail', 'search','restaurant')) as double_check, --검증용 컬럼 COUNTIF(screen='cart') as cart, COUNTIF(screen='welcome') as welcome, COUNTIF(screen='food_category') as food_category, COUNTIF(screen='home') as home, COUNTIF(screen='search_result') as serach_result, COUNTIF(screen='food_detail') as food_detail, COUNTIF(screen='search') as serach, COUNTIF(screen='restaurant') as restaurant FROM unnest_table GROUP BY ALL 3. Heavy User의 실제 Screen Journey 추적 질문: 특정 heavy user는 실제로 어떤 순서로 screen을 탐색하는가? 목적: Timestamp를 기준으로 사용자의 screen 이동 순서를 확인하고, firebaase screen 퍼널 순서 정의를 위한 탐색 수행. SELECT TIMESTAMP_MICROS(event_timestamp) as timestamp, if(event_params.key="firebase_screen", event_params.value.string_value, null) as screen FROM advanced.app_logs CROSS JOIN UNNEST(event_params) as event_params WHERE user_Id=57410 and event_date between '2022-08-01' and '2023-12-30' GROUP BY ALL HAVING screen is not null ORDER BY timestamp limit 100 4. Cart 도달 유저 vs Non-Cart 유저의 Screen 탐색량 비교 질문: Cart를 한 번이라도 조회한 유저는 그렇지 않은 유저보다 평균적으로 더 많은 screen을 탐색하는가? 목적: 사용자를 has_cart 여부로 segmentation하고 두 그룹의 평균 screen 탐색량 비교. WITH basic AS ( SELECT user_id, COUNT(*) AS screen_cnt_per_user, COUNTIF(event_params.value.string_value='cart') >0 AS has_cart FROM advanced.app_logs CROSS JOIN UNNEST(event_params) as event_params WHERE event_params.key='firebase_screen' GROUP BY user_id) SELECT AVG(IF(has_cart, screen_cnt_per_user,NULL )) as avg_view_cart, AVG(IF( not has_cart, basic.screen_cnt_per_user, null)) as avg_view_non_cart FROM basic unnest 와 집계함수를 연속적으로 쓰려고 할 때나 unnest+집계함수+having 쓰려고 할 때는 반드시 with문으로 분리해서 사용해야 오류가 안 나는 것 같더라고요. 그러다 보니 쿼리가 길어지는데 더 가독성 좋은 쿼리 작성법이 있을 것 같습니다. ㅎㅎ
안녕하세요 카일님, 강의 잘 듣고 있습니다. 연습문제 쿼리 작성해 보았는데 잘못된 부분이 있는지, 더 나은 쿼리 방식이 있다면 피드백 부탁드립니다 감사합니다. WITH basic AS (SELECT event_date, event_name, user_pseudo_id, event_params, if(event_params.key="firebase_screen", event_params.value.string_value, null) as screen FROM advanced.app_logs CROSS JOIN UNNEST(event_params) as event_params WHERE event_date between '2022-08-01' and '2022-08-18' ), basic2 as ( SELECT event_date, concat(event_name, '-', screen) as event_name_with_screen, COUNT(user_pseudo_id) as cnt FROM basic WHERE event_name in ('screen_view', 'click_payment') GROUP BY ALL HAVING event_name_with_screen is not null ORDER BY event_date) SELECT event_date, MAX(if(event_name_with_screen='screen_view-welcome', cnt, null)) as screen_view_welcome, MAX(if(event_name_with_screen='screen_view-restaurant', cnt, null)) as screen_view_restaurant, MAX(if(event_name_with_screen='screen_view-food_category', cnt, null)) as screen_view_food_category, MAX(if(event_name_with_screen='screen_view-food_detail', cnt, null)) as screen_view_food_detail, MAX(if(event_name_with_screen='screen_view-cart', cnt, null)) as screen_view_cart, MAX(if(event_name_with_screen='click_payment-cart', cnt, null)) as click_payment_cart, MAX(if(event_name_with_screen='screen_view-search', cnt, null)) as screen_view_search, MAX(if(event_name_with_screen='screen_view-search_result', cnt, null)) as screen_view_search_result FROM basic2 GROUP BY all ORDER BY event_date
김영한의 실전 데이터베이스 입문 - 모든 IT인을 위한 SQL 첫걸음(SQL부터 차근차근)
리뷰를 남기라고 하셨는데...리뷰를 어디에 남기는지 모르겠네요... 에너지 회사에서 시황 데이터와 거래 데이터를 많이 다루는 50대 입니다....sql말만 듣고 동영상 듣기까지 한 10년 정도 걸린거 같네요.. 도메인 지식만 가지고 최근 ai의 도움으로 여기까지 오게 되었습니다. 선생님 다른 강의도 잘 보겠습니다. ^^
-- 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에 넣었는데 이렇게 해도 될까요?
안녕하세요 강사님 그 전 섹션 강의에서 range index인 create_at에 인덱스를 거는것이 name에 거는것보다 속도 향상이 드라마틱하게 올라갔었는데 이번 강의 두 테이블 조인에서는 create_at 이 아닌 u.name에 인덱스가 걸렸네요..? 혼란스럽습니다 ㅠ join시 인덱스 방식이 달라지는지 궁금합니다 또, 다른 곳에서 파티셔닝, 클러스터링?? 이라는 용어들도 보이던데 이것도 인덱스에서 파생된 것일까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의안 제목은 외부 조인이지만 앞에서 내부 조인 얘기를 함께 하기도 하고 명령어도 단순히 JOIN(내부)로 사용하셔서 부모가 자식과 조인을 할 때 행 개수는 유지되거나 증가할 수 있다는 얘기를 이해하기 힘들었습니다. 내부 조인의 경우에는 행이 감소할 수도 있으니까요 강의안 '조인의 특징' 섹션 내 코드의 JOIN 명령어들을 LEFT JOIN으로 변경 또는 외부 조인의 특징이라고 명시해주시면 더 정확할 거 같아요. 섹션 제목이나 본문에 어디에도 '조인'이라고만 나와있어서..ㅠㅠ 당연한 얘기인데도 많이 헷갈렸어요 심지어 내부 조인 명령어를 썼는데도 행 개수가 감소하지가 않는 예시들이어서요
안녕하세요 강사님! 항상 수업 잘 듣고 있습니다. 저는 그간 데이터 분석가를 꿈꾸며, 강사님의 "머신러닝 완벽가이드", "tensorflow cnn", "pytorch cnn", "transformer 구현 ~", "fastapi 완벽가이드", "kaggle ~" 강의를 몇번이고 들으며 익혀왔습니다. "내가 만든 인공지능 모델이 과연 어떻게 쓰일까"에 대해서 고민하다가 fastapi까지 공부했는데요. 이제는 Data Engineering이나 MLOps Engineering 쪽으로 취업하고 싶다고 결정하여 어떻게 어디서부터 공부할지 막막합니다. 찾아보니 사실상 Data Scientist가 하는 업무를 제외하고 배포가 되는 과정까지를 다 할줄 알아야 하고, 요구하는 기술적 요건도 많아보였습니다.(docker, fastapi, vllm, kafka, airflow 등등..) 이에 강사님께서 제가 앞으로 MLOps쪽으로 간다면 어떤 것을 공부하면 좋을 것 같은지, 대학원을 생각해보는게 좋을지 등을 추천해주셨으면 좋겠습니다.. 강사님 강의만 거의 들어온 상태라서 저 강의에 나온 내용을 제외하면 아무것도 모른다고 가정해주시면 감사하겠습니다 !