묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨초보자를 위한 BigQuery(SQL) 입문
inner join 을 사용했을 때의 이점이 있을까요?
안녕하세요 카일스쿨님:)좋은 강의 너무 잘 듣고 있습니다. 실습 하나 하나 하면서 여기까지 왔는데요.join 예제를 풀어보면서 궁금한 점이 생겨서요.inner join을 사용하면 좀 더 타이트하게 제약을 둘 수 있고, 테이블 크기 자체도 줄일 수 있을 거 같다는 생각이 들었습니다. 결과도 동일하게 확인했습니다.예를 들어 join 3번 문제의 경우 trainer_pokemon 테이블에 inner join으로 trainer 테이블을 붙이면 결국 포켓몬을 잡아본 trainer로 테이블이 좁혀진다고 생각했고, 다른 경우의 수 생각할 필요 없이 location과 hometown만 비교해 결과를 얻었습니다.이때 left join을 사용하시는 이유와, 그 장점에 대해 알 수 있을까요?감사합니다!
-
해결됨초보자를 위한 BigQuery(SQL) 입문
JOIN 연습문제 3번 답이 다르게 나와요ㅠㅠ
분명 선생님께서 해주신 거랑 똑같이 쿼리 입력했는데왜 저는 28/43개가 아니라 17/18개가 나오는 걸까요...? (혹시 그새 데이터 파일이 바뀌거나 한 걸까요 😂)
-
해결됨초보자를 위한 BigQuery(SQL) 입문
강의 자료를 블로그 작성에 활용해도 될까요?
안녕하세요 카일스쿨님!PM 강의부터 빅쿼리 SQL까지 너무 좋은 강의 덕분에 잘 공부하고 있습니다. 해당 내용을 블로그에 정리하고 싶은데요. 장표를 활용해도 될지 궁금합니다. 상업적인 광고는 달려 있지 않으며, 정리 용도로 제 생각을 덧붙여 정리 예정입니다. 저작권 관련 예민한 부분이라 미리 여쭤보며, 혹 불가능 하더라도 충분히 이해되는 부분입니다. 감사합니다!!
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
1-9 마지막 테이블 피벗 해보기
안녕하세요 카일님강의 마지막에 주신 연습문제 해보았습니다. PIVOT에 어떤 연산자를 사용할 것인가?MAX로 할 경우 -> 별도의 연산된 결과값이 있는 base`가 필요할 것 같음. 이 경우 강의 중 작성된 cnt를 참조하여 작성할 수 있을 것 같으나 3중 쿼리라는게 마음에 걸림.SUM으로 할 경우 -> 강의 중 작성한 base 만으로 충분할 것 같음. 2중 쿼리로 충분해보임.따라서 B안으로 작성해보았습니다.WITH base AS ( SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, platform, -- event_param, MAX(IF(event_param.key = 'firebase_screen',event_param.value.string_value, NULL)) AS firebase_screen, -- MAX(IF(event_param.key = 'food_id',event_param.value.int_value, NULL)) AS food_id, MAX(IF(event_param.key = 'session_id',event_param.value.string_value, NULL)) AS session_id, FROM advanced.app_logs CROSS JOIN UNNEST(event_params) AS event_param WHERE -- event_date = '2022-08-01' -> 적은 데이터로 쿼리를 작성하기 위해 입력한 임시 조건 event_date BETWEEN '2022-08-01' AND '2022-08-18' GROUP BY ALL -- LIMIT 100 -> 기초 구문 작성 완료 시 삭제 필요! ), filter_event_and_concat_event_and_screen AS ( -- name, screen concatate (필요한 이벤트만 WHERE 조건 걸어 사용) SELECT * EXCEPT(event_name,firebase_screen, event_timestamp), CONCAT(event_name, '-', firebase_screen) AS event_name_with_screen, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM base WHERE event_name IN('screen_view', 'click_payment') ) # PIVOT 연습문제 SELECT event_date, SUM(IF(event_name_with_screen = 'screen_view-welcome',1,0)) AS `screen_view-welcome`, SUM(IF(event_name_with_screen = 'screen_view-home',1,0)) AS `screen_view-home`, SUM(IF(event_name_with_screen = 'screen_view-food_category',1,0)) AS `screen_view-food_category`, SUM(IF(event_name_with_screen = 'screen_view-restaurant',1,0)) AS `screen_view-restaurant`, SUM(IF(event_name_with_screen = 'screen_view-cart',1,0)) AS `screen_view-cart`, SUM(IF(event_name_with_screen = 'click_payment=cart',1,0)) AS `click_payment-cart`, FROM filter_event_and_concat_event_and_screen GROUP BY ALL ORDER BY event_date ASC
-
해결됨초보자를 위한 BigQuery(SQL) 입문
JOIN 결과 테이블을 따로 지정할 수 있는지 궁금합니다.
좋은 강의 너무 감사드립니다! JOIN 개념 배우다가 의문이 생겨 질문 남깁니다! 혹시 JOIN 연산 수행했을 때 합쳐진(JOIN 결과) 테이블은 통째로 지정할 순 없나요?예를 들면 실습해주신 쿼리에서, JOIN을 했는데 다시 tp.*, t.* , p.* 처럼 일일이 호출할 거면 JOIN한 의미가 있나 해서요..😅 JOIN을 했으니까, tp.*만 호출해도 전체 테이블이 다 나오면 편할 거 같은데, 그렇게 되지 않는 이유가 궁금합니다!
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
counts와 cnt 차이
안녕하세요. Weekly retention을 구하고자 아래와 같이 쿼리를 작성했습니다.WITH base AS (SELECT DISTINCT user_id, event_name, DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul') AS event_datetime, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp),'Asia/Seoul')) AS event_date, user_pseudo_id FROM `advanced.app_logs` WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ), first_week_and_diff AS ( SELECT *, DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week FROM ( SELECT DISTINCT user_pseudo_id, 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 FROM base ) ), user_cnt AS ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ) SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_week_user_cnt), 2) AS retention_rate FROM ( SELECT diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_of_week ASC) AS first_week_user_cnt FROM user_cnt );이렇게 쿼리 작성을 하니 오류가 발생했고 user_cnt AS ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week )이 부분에서 테이블 이름을 user_counts로 수정하니 제대로 동작함을 확인했습니다. 왜 이름 때문에 오류가 발생하는 것인지 궁금합니다.
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
1-5 예제용 학생 점수 데이터 테이블 생성 시 오류 발생
안녕하세요 카일님1-5 학습 중 PIVOT 예제용 TABLE을 만들어 보려고 하였습니다.결론부터 말씀드리면 TABLE 생성에 성공하였어요.다만 궁금한 것은 제가 겪은 오류에 대한 해석이 올바른 것인지 확인 받고 싶어서 질문 드립니다.1-4 강에 있던 array_exercise 생성 구문을 참고하여 아래와 같은 구문으로 실행하였더니 생성되지 않았습니다.가장 안쪽의 select 부터 실행하면서 찾아보니 최하단의 UNION ALL이 원인이었더라구요. UNION ALL 은 아래에도 추가 ROW를 입력해야 할 때, 한 행으로 밀어넣는 명령어이므로, 마지막 행 다음에는 넣지 말아야 한다. 넣을 경우 그 뒤에 추가적인 데이터의 입력을 요구하나, 데이터가 없으므로 실행이 되지 않는 것이다.라고 이해했는데, 맞게 이해했을까요?CREATE OR REPLACE TABLE `advanced.grade` AS SELECT student, grades FROM ( SELECT 'A' AS student, ARRAY<STRUCT<subject STRING, score INT64>>[ STRUCT('수학', 80), STRUCT('영어', 90), STRUCT('과학', 85) ] AS grades UNION ALL SELECT 'B', ARRAY<STRUCT<subject STRING, score INT64>>[ STRUCT('수학', 75), STRUCT('영어', 95), STRUCT('과학', 80) ] UNION ALL )
-
해결됨초보자를 위한 BigQuery(SQL) 입문
4-7. 조건문 연습문제 5번 질문있습니다!
안녕하세요 카일님!좋은 강의 너무 감사드립니다 :)조건문 연습문제를 혼자 풀고 카일님이 작성하신 쿼리와 비교해보았는데 저와는 다르게 서브쿼리 없이 작성하셨더라고요!결과는 잘 나오지만 서브쿼리를 사용하면 효율성이 떨어지는 쿼리일까요? 현업에서는 어떤 쿼리를 선호할까요?('Old' 로 분류되는 결과도 얻고 싶어서 기준 날짜를 바꿨습니다.)
-
해결됨초보자를 위한 BigQuery(SQL) 입문
4-4강 EXTRACT 함수 사용 (04:15 부근)
카일스쿨님 좋은 강의 감사드립니다!EXTRACT함수 예시 쿼리를 실행하니까 위와 같이 오류가 나서 여쭤봅니다. gpt한테 물어보니 AS DATETIME을 쓰지 말라고 하던데, 문법 자체가 바뀐 걸까요? 또한, 예시 쿼리 만드실 때 date, year 뽑는 쿼리에는 AS DATETIME을 안 쓰셨는데, month, day, hour, minute에는 쓰셨던 이유도 궁금합니다!
-
미해결SQL 시작도 못한 분들 드루와요
저도 추출이 안되어 문의드립니당..!
저도 이렇게 입력하였는데 오류로 노출되어.. 확인 부탁드리겠습니댜🥹
-
해결됨초보자를 위한 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