묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨초보자를 위한 BigQuery(SQL) 입문
JOIN 연습문제2번
안녕하십니까 선생님,JOIN을 할때 조건들을 처리해놓고 조인을 하시라고 하셨는데영상에 나온 답과 같지만 풀이법이 달라서 아래와 같이 작성해도 큰 문제가 없겠죠?select type1, count(p.type1) as grass_cnt from ( select trainer_id, pokemon_id from basic.trainer_pokemon where 1=1 and status != 'Released' ) as tp left join basic.pokemon as p on tp.pokemon_id = p.id where 1=1 and p.type1 = 'Grass' group by type1
-
해결됨초보자를 위한 BigQuery(SQL) 입문
구글클라우드 테이블생성오류
질문이 있는 경우 다음과 같이 시도해보고 공유해주세요구글에 검색한 후, 어떤 결과가 나왔는지그 결과를 토대로 어떤 시도를 했는지? 시도에서 어떤 과정이 진행되지 않았는지데이터를 추출하는 과정에 대한 고민은 Input / Output을 작성해주세요 계속 오류가 나와요 ㅠㅠ
-
해결됨초보자를 위한 BigQuery(SQL) 입문
구글클라우드 테이블 생성시 오류 발생
질문이 있는 경우 다음과 같이 시도해보고 공유해주세요구글에 검색한 후, 어떤 결과가 나왔는지그 결과를 토대로 어떤 시도를 했는지? 시도에서 어떤 과정이 진행되지 않았는지데이터를 추출하는 과정에 대한 고민은 Input / Output을 작성해주세요 안녕하세요,구글클라우드에 테이블 생성시 오류가 발생되고있는데 어떻게 해야할까요..?
-
해결됨초보자를 위한 BigQuery(SQL) 입문
16번 문제
안녕하세요! 포켓몬을 제일 많이 풀어준 트레이너는 누구일까요?select trainer_id, count(status)from basic.trainer_pokemonwhere status = "Released"group by trainer_idorder by count(status) desclimit 1 이렇게 select에서 count(status) 써도 되나요...?포켓몬을 많이 풀어줬다 --> status가 released 많이 했다 이렇게 받아들였어요
-
해결됨초보자를 위한 BigQuery(SQL) 입문
12번 문제
안녕하세요!단일(하나의 타입만 있는) 타입 포켓몬 중 많은 type1은 무엇일까요? select type1, count(type1)from basic.pokemonwhere type1 is not null and type2 is nullgroup by type1order by count(type1) desclimit 10 단일 타입만 있다고 하니까 type1 is not null 도 조건에 걸어야 하지 않나요?그냥 type2 is null 만 하면 type1도 null 이고 type2 도 null 인 값이 나올 수 있잖아요!count(id)가 null 값은 안 세서 괜찮은 건가요..?정확하게 하고 싶으면 where type1 is not null and type2 is null이렇게 표현해도 될까요?
-
해결됨초보자를 위한 BigQuery(SQL) 입문
desc 위치
안녕하세요~ 강의안 p.165에 포켓몬의 수를 타입 별로 집계하고, 포켓몬의 수가 10 이상인 타입만 남기는 쿼리를 작성해주세요. 포켓몬의 수가 많은 순으로 정렬해주세요. select type1, count(id) descfrom basic.pokemongroup by type1having count(id)>=10 이렇게 order by count(id) desc 안 쓰고select 문에 desc 써도 되나요?
-
해결됨초보자를 위한 BigQuery(SQL) 입문
오류
안녕하세요~ 벌써부터^^; 이런 오류가 나와서 문의 남깁니다.
-
해결됨초보자를 위한 BigQuery(SQL) 입문
4-5. 시간 데이터 연습 문제 4번
안녕하세요, 카일님. 강의 잘 듣고 있습니다! 다름이 아니라 연습 문제를 풀던 중 궁금한 점이 생겨 문의 남깁니다. 4-5. 시간 데이터 연습 문제 4번을 푸는 과정에서 제가 작성한 쿼리문은 아래와 같으며, 쿼리 결과는 답안과 동일하다는 것을 확인했습니다. 그러나 결과만 같고 허점이 있는 쿼리문인지 판단이 안 되어서 이렇게 쿼리문을 작성해도 괜찮은지, 서브 쿼리를 활용하는 게 필수라면 왜 그런지 여쭤보려고 질문 드립니다! 질문 확인해주셔서 감사드리며 답변 기다리겠습니다 :) SELECT COUNT(DISTINCT id) AS battle_cnt, EXTRACT(DAYOFWEEK FROM battle_datetime) AS day_of_week, FROM basic.battle GROUP BY day_of_week ORDER BY day_of_week ASC
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
(빅쿼리활용편)디스코드 접속 시 초대 수락이 안됩니다
안녕하세요, 빅쿼리 활용편 강의 수강 중입니다.디스코드 접속 시 초대 수락이 불가해서 확인 부탁드리겠습니다. 어떤 강의를 들으면서 발생했나요? 빅쿼리 활용편어떤 문제가 생겼나요?첨부파일 내 링크를 통해 접속 후 초대 수락하기 클릭 시 불가하다는 메세지가 나옵니다 환경이 어떻게 되나요? 맥 m1 사용중입니다
-
해결됨초보자를 위한 BigQuery(SQL) 입문
총 정리 문제 풀이 4번 질문 있습니다.
안녕하세요. 선생님,총 정리 문제 풀이 4번을 강의를 보면서 쿼리를 따라 작성해봤는데 결과가 pokemon_cnt: 1, avg_level: 42.0으로 다르게 나오네요.. 몇 번을 다시 새로 써도 똑같은 결과가 나옵니다 ㅠㅠWITH winner_cnts AS ( SELECT winner_id, COUNT(winner_id) AS win_cnt FROM basic.battle WHERE winner_id IS NOT NULL GROUP BY winner_id ), top_winner AS ( SELECT wc.winner_id AS trainer_id, wc.win_cnt, t.name AS trainer_name FROM winner_cnts AS wc LEFT JOIN basic.trainer AS t ON wc.winner_id = t.id ORDER BY wc.win_cnt DESC LIMIT 1 ) SELECT tw.trainer_id, tw.trainer_name, tw.win_cnt, COUNT(tp.pokemon_id) AS pokemon_cnt, ROUND(AVG(tp.level),2) AS avg_level FROM top_winner AS tw LEFT JOIN basic.trainer_pokemon AS tp ON tw.trainer_id = tp.id WHERE tp.status IN("Active", "Training") GROUP BY tw.trainer_id, tw.trainer_name, tw.win_cnt
-
해결됨초보자를 위한 BigQuery(SQL) 입문
총 정리 문제 풀이 2번 방출 여부 상관
안녕하세요. 선생님, 2번 문제에 질문있습니다.2. 각 포켓몬 타입1을 기준으로 가장 많이 포획된(방출 여부 상관없음) 포켓몬의 타입1, 포켓몬의 이름과 포획 횟수를 출력해주세요.위 문제에서 만약에 방출 여부를 판단하고 풀어본다면 어떻게 나오는지 궁금해서 풀이를 해보았습니다. 아래 쿼리대로 풀면 될까요?WITH result AS ( SELECT pokemon_id, status, SUM(CASE WHEN status IN('Active', 'Training') THEN 1 ELSE 0 END) AS status_pokemon_cnt FROM basic.trainer_pokemon GROUP BY pokemon_id, status ORDER BY status_pokemon_cnt DESC ) SELECT type1, kor_name, status_pokemon_cnt FROM result LEFT JOIN basic.pokemon AS p ON result.pokemon_id = p.id LIMIT 1
-
해결됨초보자를 위한 BigQuery(SQL) 입문
총 정리 문제 풀이 2번 질문 있습니다
안녕하세요. 선생님2번 풀이에서 저는 pokemon을 FROM 절에 쓰고, LEFT 함수로 trainer_pokemon을 썼는데요. 선생님과 결과가 다르게 나오더라구요.이 경우에는 "가장 많이 포획된" 기준으로 물었기 때문에 status가 있는 trainer_pokemon을 FROM 절에 써야하는 건가요??SELECT type1, kor_name, COUNT(tp.id) AS pokemon_cnt FROM basic.pokemon AS p LEFT JOIN basic.trainer_pokemon AS tp ON p.id = tp.pokemon_id GROUP BY type1, kor_name ORDER BY pokemon_cnt DESC
-
해결됨초보자를 위한 BigQuery(SQL) 입문
5-3 문제 trainer_pokemon을 LEFT에 두면
선생님, 안녕하세요. 강의 잘 듣고 있습니다!다름이 아니라 3번 문제에서 trainer를 LEFT에 두시고 계산하셨는데, 저는 trainer_pokemon을 LEFT에 두고 계산했더니 오류가 뜹니다.SELECT COUNT(DISTINCT tp.trainer_id) AS trainer_cnt FROM basic.trainer_pokemon AS tp LEFT JOIN basic.trainer AS t ON tp.location = t.hometown WHERE tp.location = t.hometown그렇다고, COUNT에 DISTINCT를 없애니결과값이 3003개로 나옵니다.
-
해결됨초보자를 위한 BigQuery(SQL) 입문
구글클라우드설정-테이블성성후 파티션 나누기 설정에서 battle_datetime 이 목록에 나타나지 않습니다.
구글클라우드설정-테이블성성후 파티션 나누기 설정에서 battle_datetime 이 목록에 나타나지 않습니다.
-
해결됨초보자를 위한 BigQuery(SQL) 입문
테이블 만들기 오류
설명해주신 대로 csv 파일 업로드해서 테이블 만들기를 누르면, 마우스 커서가 빙글빙글 돌기만 하고 아무 반응이 없습니다.해결방안이 있을까요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 4주차] 최종 과제
노션 링크 첨부합니다.https://focapa.notion.site/4-141094a2b89980b080c6e19f8b5c4a48?pvs=4
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝 스터디 최종 과제] 6-1의 최종 과제
https://www.notion.so/yijin87/Foodie-4-1430181a6e9b808c9426fb5475909a23?pvs=4 노션링크로 대체합니다.
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 4주차 과제] 강의 6-1의 최종 과제
노션으로 작성하여 링크 첨부합니다.https://sapphire-spade-aa6.notion.site/1435677c375480a997e3d8bf961008dd
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 3주차 과제] 리텐션 연습 문제
6주차 과제 - 1) Weekly Retention을 구하는 쿼리를 바닥부터 스스로 작성해보세요 with base as ( select distinct user_pseudo_id , event_name , date(datetime(timestamp_micros(event_timestamp),'Asia/Seoul')) AS event_date from advanced.app_logs where event_date between '2022-08-01' and '2022-11-01' ) , retention_base as ( select distinct date_trunc(event_date, week(monday)) as event_week , min(date_trunc(event_date , week(monday)) ) over(partition by user_pseudo_id order by event_date)as first_week , user_pseudo_id from base ) , middle as ( select event_week , first_week , date_diff(event_week, first_week, day) as diff , user_pseudo_id from retention_base ) , final as ( select diff , count(distinct user_pseudo_id) as user_cnt from middle group by all ) select diff , first_value(user_cnt) over(order by diff asc) as first_visit_users , user_cnt , round((user_cnt/first_value(user_cnt) over(order by diff asc)), 2) from final - 2) Retain User를 New + Current + Resurrected + Dormant User로 나누는 쿼리를 작성해보세요. --한달내 유저가 얼마나 많은 이벤트를 발생시키는지? --지속적으로 사용한다의 정의를 이벤트를 고려할 것인지 아니면 방문만 볼것인지 신규 유저(New) : 제품을 처음 사용하는 유저 --각 달에 첫 로그를 남긴 유저 기존 유저(Current) : 제품을 지속적으로 사용하는 유저 --한달내에 복귀 유저(Resurrected) : 과거에 사용 -> 비활성 -> 다시 제품을 사용한 유저 휴면 유저(Dormant) : 일정 기간 제품을 사용하지 않은 비활성화 사용자 --해당 주 이외에 - 3) 주어진 데이터에서 어떤 사람들이 리텐션이 그나마 높을까요? 찾아보세요 --함께 고민해보면 좋을 가이드라인 - 휴면 유저를 어떻게 복귀 유저로 부활시킬 수 있을까? - 어떻게 신규 유저를 계속 늘릴 수 있을까? - 기존 유저가 감소하지 않으려면 어떻게 해야할까? - 4) Core Event를 “click_payment”라고 설정하고 Weekly Retention을 구해주세요 with base as ( select distinct user_pseudo_id , event_name , date(datetime(timestamp_micros(event_timestamp),'Asia/Seoul')) AS event_date , min(date_trunc(datetime(timestamp_micros(event_timestamp),'Asia/Seoul') , week(monday)) ) over(partition by user_pseudo_id order by event_week)as first_all_week from advanced.app_logs where event_date between '2022-08-01' and '2022-11-01' ) , retention_base as ( select distinct -- extract(event_date from week) as event_week , min(date_trunc(event_date , week(monday)) ) over(partition by user_pseudo_id order by event_week)as first_week -- , date_trunc(min(event_date) over(partition by user_pseudo_id), week(monday)) as first_week , date_trunc(event_date, week(monday)) as event_week , user_pseudo_id from base where event_name = “click_payment” ) , middle as ( select event_week , first_week , date_diff(event_week, first_week, day) as diff , user_pseudo_id from retention_base ) , weeks as ( select distinct first_week from base ) , final as ( select diff , min(first_week) as first_Week , count(distinct user_pseudo_id) as user_cnt from middle group by all ) select diff , first_value(user_cnt) over(order by diff asc) as first_visit_users , user_cnt , round((user_cnt/first_value(user_cnt) over(order by diff asc)). , 2) --safe_divide() 사용하면 좋음 from final1번 문제(15분)주차별 각 카테고리별 평균 할인율이 가장 높았던 기간과 할인율을 구하는 쿼리를 작성해주세요단, 날짜 데이터를 YYYY-MM-DD 23:59:39 이런 형태로 변경해주세요with raw as (select a.user_id , a.item_id , a.actual_price 90 , b.category , b.list_price 100 , (b.list_price-a.actual_price)/ b.list_price as discount , a.transaction_date from transaction_data a left join item_info b on a.item_id=b.item_id ) select FORMAT_TIMESTAMP('%Y-%m-%d 23:59:59', TIMESTAMP(DATE_TRUNC(DATE(transaction_date), WEEK(MONDAY)))) AS week_start_date, -- 주차의 월요일 날짜를 “YYYY-MM-DD 23:59:59” 형식으로 변환 , category , avg(discount) as avg_discount from raw group by 1,2 order 3 desc limit 1 2번 문제(10분)2024년 1월에 가장 많은 매출을 기록한 카테고리를 구하는 쿼리를 작성해주세요with raw as (select a.user_id , a.item_id , a.actual_price 90 , b.category , b.list_price 100 , (b.list_price-a.actual_price)/ b.list_price as discount , a.transaction_date from transaction_data a left join item_info b on a.item_id=b.item_id where extract(month from a.transaction_date) = 1 and extract(year from a.transaction_date) = 2024 ) select category , sum(actual_price) as gmv from raw group by 1 order gmv desc limit 1 3번 문제(10분)유저별 총 구매 금액이 200만원 이상인 유저들이 가장 많이 구매한 카테고리를 찾는 쿼리를 작성해주세요with raw as (select a.user_id , a.item_id , a.actual_price , b.category , b.list_price , a.transaction_date , sum(a.actual_price) over(partition by user_id) as user_gmv from transaction_data a left join item_info b on a.item_id=b.item_id where ) select category , count(item_id) as cnt_item , count(distinct item_id) as cnt_item , sum(actual_price) as gmv from raw where user_gmv group by 1 order 2 desc --가장많이의 정의가 구매건수라면 order 3 desc --가장많이의 정의가 유니크한 상품수라면 order 4 desc --가장많이의 정의가 gmv 매출이라면 limit 1
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
[빠짝스터디 4주차 과제] 강의 6-1의 최종과제
https://ambiguous-serpent-eb1.notion.site/4-6-1-10208045473b80789c2ccd0823506890