3-13 과제
미해결
BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
안녕하세요 과제 제출합니다! 감사합니다. https://app.notion.com/p/3db130f3c2d88053b03cdac6b65cd928?source=copy_link
- sql
- Google-Analytics
- firebase
- google-sheets
- bigquery
174만명의 커뮤니티!! 함께 토론해봐요.
미해결
BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
안녕하세요 과제 제출합니다! 감사합니다. https://app.notion.com/p/3db130f3c2d88053b03cdac6b65cd928?source=copy_link
미해결
다양한 사례로 익히는 SQL 데이터 분석
안녕하세요. 강사님 강사님께서 26강 5일 가중이동평균 문제풀이 해주신 방법외에 아래와 같이 lag 함수 활용해서 문제 풀어도 현업에서 사용하기 문제 없을까요? with temp_01 as (select a.order_date as d_day, sum(b.amount) as sum_amount , row_number() over(order by date(a.order_date) asc) as rnum from nw.orders a join nw.order_items b on a.order_id = b.order_id where a.order_date >= date('1996-07-08') group by a.order_date) , temp_02 as ( select * , count(*) over(order by d_day rows between 4 preceding and current row) as cnt , avg(sum_amount) over(order by d_day rows between 4 preceding and current row) as m_avg_5days #일반 이동평균 구하기 , ( lag(sum_amount,1) over(order by d_day) * 1 + lag(sum_amount,2) over(order by d_day) * 1 + lag(sum_amount,3) over(order by d_day) * 1 + lag(sum_amount,4) over(order by d_day) * 0.5 + sum_amount * 1.5 ) / 5 as w_m_avg_5days #5일 가중이동평균 구하기 from temp_01 order by d_day ) select * from temp_02 where rnum >= 5; 이런식으로 풀어도 괜찮을까요? 현업에서 활용할때 어떤 방식이 더 효율적일지 궁금합니다!
미해결
초보자를 위한 BigQuery(SQL) 입문
배틀 테이블 설정 시 계속해서 이 오류 창이 뜨는데 어떤 게 문제인지 알 수 있을까요..? 파티션 나누기, 건너 뛸 헤더 행 등 모든 설정은 정확하게 완료했습니다..
미해결
김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복
DB 쿼리를 설계하면서 항상 궁금했던 점이 있습니다. 쿼리가 점점 복잡해지다 보면 Sort , GROUP BY 등의 연산을 DB에서 처리하는 것보다, 데이터를 애플리케이션으로 가져온 후 애플리케이션에서 처리하는 것이 더 효율적이지 않을까 하는 생각이 들 때가 있습니다. 그렇다면 일반적으로 DB 쿼리를 최적화할 때는 애플리케이션으로 데이터를 가져와 처리하기보다는, 적절한 Index 설계를 통해 가능한 한 DB에서 연산을 처리하는 것이 맞는 방향일까요? 아니면 상황에 따라서는 필요한 데이터를 DB에서 조회한 후, 일부 연산을 애플리케이션에서 처리하는 것도 하나의 최적화 방법이 될 수 있을까요? 제가 생각하는 방향 자체가 잘못된 것인지, 아니면 실제로 상황에 따라 고려할 수 있는 방법인지 궁금해서 질문드립니다.
미해결
김영한의 실전 데이터베이스 - 성능 최적화, 실행 계획과 인덱스 완전 정복
안녕하세요 영한님! 강의에서 말씀해 주신 것처럼, 인덱스를 생성한다고 해서 항상 옵티마이저가 해당 인덱스를 사용하는 것은 아니라는 점은 이해했습니다. 그렇다면 실무에서는 특정 인덱스를 어떤 쿼리나 사용 패턴을 고려해서 만들었는지, 그리고 어떤 의도로 설계했는지를 별도로 기록하거나 관리하는 방법이 있을까요? 예를 들어 시간이 지나 다른 개발자가 인덱스를 보더라도, “이 인덱스는 특정 조회 쿼리의 성능을 개선하기 위해 만들었다”와 같은 설계 의도를 파악할 수 있도록 관리하는지가 궁금합니다. 설계 1편에서 소개해 주신 용어 사전처럼 별도의 문서나 규칙을 두고 관리하는 방법이 있는지, 혹은 실무에서 일반적으로 사용하는 다른 방법이 있는지도 궁금합니다!
미해결
데이터 분석 SQL Fundamentals
안녕하세요! product_id를 집계 기준으로 하는 GROUP BY 구문을 작성할 때, 해당 product_id와 맵핑되는 category_id은 SELECT절에서 max(category_id)으로 처리하는 방식으로 설명해주셨습니다. 혹시 아래처럼 category_id도 GROUP BY에 같이 작성한다면, 어떤 점이 다르며 이슈나 문제가 될만한 상황이 있는지 궁금합니다! SELECT a.PRODUCT_ID, b.CATEGORY_ID, sum(amount) AS sum_by_prod FROM nw.ORDER_ITEMS a JOIN nw.PRODUCTS b ON a.PRODUCT_ID = b.PRODUCT_ID GROUP BY a.PRODUCT_ID, b.CATEGORY_ID
미해결
김영한의 실전 데이터베이스 - 기본편
[질문 내용] 여기에 질문 내용을 남겨주세요. 저는 1번문제에서 FK -> PK 로풀었습니다 영한님은 PK -> FK 로 푸셨던것에 질문입니다. FK -> PK는 항상 다대일으로 e.managed_id가 가리키는 PK 행은 0~1개라서 조인해도 왼쪽 테이블 행이 늘지 않아서 왼쪽 테이블이 행을 정하고, 조인은 컬럼만 붙인다고 생각했습니다. PK -> FK는 일대로써 한 행이 여러 행으로 늘어나는데, 그럼 on 조건까지 다 읽어야 이해되지 않을까 해서 여쭤봅니다. select e.employee_id, e.name, e.managed_id, m.name as manager_name from employees e join employees m on e.managed_id = m.employee_id where m.name = '최과장';
해결됨
초보자를 위한 BigQuery(SQL) 입문
1번 문제에서 catch_date를 기준으로 계산하라고 되어있는데, catch_date와 catch_datetime의 비교검증을 통해 catch_date가 KST가 아닌 UTC 기준이라는 것을 알았고, 그 다음에 왜 데이터의 기간을 catch_datetime을 사용해야 하는지 이해가 잘 가지 않습니다. 기준이 catch_date라고 명시되어 있다면 번거롭게 KST 기준으로 변환을 하는 게 아니라 그냥 UTC 기준으로 계산하는게 맞는 거 아닌가요?
해결됨
BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
안녕하세요! 3-13 리텐션 과제 제출합니다. 2, 3번 과제의 경우 클로드의 도움을 조금 받았으며, 최대한 스스로 생각하고 검토만 받는 방향으로 진행하였습니다. 부족한 부분이나 더 생각해볼 수 있는 부분들 피드백 주시면 감사하겠습니다! 과제 링크 https://inquisitive-toy-5d0.notion.site/3c6bc12dee6d80dc9b2ed0e7d1c9a33c?source=copy_link
미해결
다양한 사례로 익히는 SQL 데이터 분석
안녕하세요 선생님, 좋은 강의 잘 수강하고 있습니다. 다름이 아니라 실습 환경 세팅 중에 막히는 부분이 있어서 문의를 남기게 되었습니다. 제가 현재 개인 PC가 아닌 회사 노트북을 사용하여 실습을 진행하려다 보니, 사내 보안 및 권한 문제로 인해 로컬에 PostgreSQL을 설치할 수가 없는 상황입니다. 현재 DBeaver를 통해 사내 시스템인 Hive DB에만 접근이 가능 합니다. 제공해 주신 실습 파일( data_schema.backup )을 확인해 보았는데, 해당 파일은 PostgreSQL 전용 백업 파일이라서 제가 사용하는 Hive 환경에서는 복원(Restore)을 하거나 데이터를 읽어 들일 수가 없습니다. 강의를 계속 따라가고 싶은데, 혹시 이 백업 파일 대신 아래 두 가지 형태의 파일을 별도로 제공해 주실 수 있으실까요? 로우 데이터 파일: 엑셀이나 텍스트 형태의 원본 데이터 파일 (예: .csv 또는 .txt ) 스키마 쿼리 파일: 각 테이블의 컬럼명과 데이터 타입을 알 수 있는 테이블 생성 스크립트 (예: CREATE TABLE 문이 적힌 .sql 또는 텍스트 파일) CSV 파일과 테이블 생성 쿼리만 제공해 주시면, 제가 Hive 문법에 맞게 데이터 타입(예: VARCHAR -> STRING 등)을 직접 수정하여 테이블을 생성한 뒤 DBeaver의 데이터 Import 기능으로 밀어 넣어서 실습을 진행해 보겠습니다. 환경이 달라 번거로운 요청을 드리게 되어 죄송합니다. 확인해 주시면 정말 감사하겠습니다!
미해결
중고급 SQL과 실전 데이터 분석 101 문제 풀이
안녕하세요, sakila실전 17번에서 궁금증이 생겼는데요, store 테이블에 manager_staff_id가 있고, staff에 저는 staff_id만 존재해가지고 manager_staff_id가 staff_id안에 있을거라고 판단하고 join을 staff와 store로 하였습니다. 그래서 간단히 풀기는 하였는데 현업에서도 혹시 이와 같은 경우가 발생할 경우, 분석가가 판단하고서 join을 진행하는게 맞는건가요? 아니면 유관 부서에 질문해서 두 테이블에 있는 내용이 같은지 다른지를 묻고 진행하는게 맞는건가요?
해결됨
BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
안녕하세요 카일님, 잘 듣고 있습니다. 강의 말미에서 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문으로 분리해서 사용해야 오류가 안 나는 것 같더라고요. 그러다 보니 쿼리가 길어지는데 더 가독성 좋은 쿼리 작성법이 있을 것 같습니다. ㅎㅎ
미해결
김영한의 실전 데이터베이스 입문 - 모든 IT인을 위한 SQL 첫걸음(SQL부터 차근차근)
좀 늦게 알게되었는데..김영한 강사님의 마스터패스 기한을 좀 연장해 주실수 있나요?
해결됨
BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
안녕하세요 카일님, 강의 잘 듣고 있습니다. 연습문제 쿼리 작성해 보았는데 잘못된 부분이 있는지, 더 나은 쿼리 방식이 있다면 피드백 부탁드립니다 감사합니다. 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
해결됨
실습으로 손에 잡히는 SQLD(2과목)
로그인해도 DCL 명령어가 안됩니다.. CREATE 문을 실행하려면 개인 스키마가 필요합니다. 잠시 후 다시 시도하거나 재로그인해주세요.
미해결
SQLD의 정석: 노랭이 문제집 씹어먹기
3,4번 선지에서 왜 토탈이 소멸되나요 ??
미해결
실습으로 손에 잡히는 SQLD(2과목)
찾아봐도 실습 하는 링크 외에는 안보이네요. 시험 보기 전 요약집을 보려고 했는데 찾기 어려워서 문의드립니다.
미해결
핵심만 쉽게, 모두의 SQL 데이터 분석
안녕하세요, 강의 수강중인데, 해당 강의 교재에 첨부되어있는거는 32비트용만 있고, 제공해주신 링크(https://datachef.co.kr)는 접속이 안됩니다. 64비트용 다운로드 링크를 못찾겠습니다...ㅠㅠ
미해결
김영한의 실전 데이터베이스 입문 - 모든 IT인을 위한 SQL 첫걸음(SQL부터 차근차근)
리뷰를 남기라고 하셨는데...리뷰를 어디에 남기는지 모르겠네요... 에너지 회사에서 시황 데이터와 거래 데이터를 많이 다루는 50대 입니다....sql말만 듣고 동영상 듣기까지 한 10년 정도 걸린거 같네요.. 도메인 지식만 가지고 최근 ai의 도움으로 여기까지 오게 되었습니다. 선생님 다른 강의도 잘 보겠습니다. ^^
해결됨
초보자를 위한 BigQuery(SQL) 입문
-- 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에 넣었는데 이렇게 해도 될까요?