묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨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
-
해결됨[백문이불여일타] 데이터 분석을 위한 고급 SQL
196. Delete Duplicate Emails 좋은 코드 질문
DELETE A1 FROM Person A1 INNER JOIN Person A2 ON A1.email = A2.email WHERE A1.id > A2.id;이너조인 연습 DELETE FROM Person --삭제 WHERE id IN ( SELECT id --외부 서브쿼리 FROM ( SELECT id, --내부 서브쿼리 ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) as id_rank FROM Person ) Number_Practice WHERE id_rank > 1 --외부조건 2순위 이상 );윈도우함수 Row_number 활용PARTITION BY - 그룹ORDER BY - 순위 (id) WITH CTE_practice AS ( SELECT id, ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) as id_rank FROM Person ) DELETE FROM Person WHERE id IN (SELECT id FROM CTE_practice WHERE id_rank > 1);CTE 이용WITH CTE_NAME AS (내부서브쿼리) DELECTWHERE id IN ( 외부 서브 쿼리) 3가지를 연습해봤는데,실무적으로는 어느 것을 더 지향하는지 (좋은코드? 클린코드?)궁금해서 질문드립니다.
-
해결됨초보자를 위한 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' 로 분류되는 결과도 얻고 싶어서 기준 날짜를 바꿨습니다.)
-
미해결[ITⓔ코칭] Oracle로 배우는 실전 데이터관리
21c 다운
oracle database xe download 을 검색하면Oracle Database 21c Express Edition화면이 나오는데이 버전을 다운받아도 될까요?
-
해결됨초보자를 위한 BigQuery(SQL) 입문
4-4강 EXTRACT 함수 사용 (04:15 부근)
카일스쿨님 좋은 강의 감사드립니다!EXTRACT함수 예시 쿼리를 실행하니까 위와 같이 오류가 나서 여쭤봅니다. gpt한테 물어보니 AS DATETIME을 쓰지 말라고 하던데, 문법 자체가 바뀐 걸까요? 또한, 예시 쿼리 만드실 때 date, year 뽑는 쿼리에는 AS DATETIME을 안 쓰셨는데, month, day, hour, minute에는 쓰셨던 이유도 궁금합니다!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
강사님 쿼리 설명중에 로그시간 이라는 단어를 사용하시는데, 이 로그시간이라는 말의 의미를 알수 있을까요?
안녕하세요. 강의 잘 보고 있습니다.강사님 쿼리 관련 설명에서, 로그시간이라는 단어를 사용하시는데, 이 로그시간이라는 것에 의미를 좀 알수 있을까요?ex: 정확한 데이터 기준점(board_id =1, article_id=5)이 있기 때문에, 인덱스에서 로그 시간에 기존점을 찾을 수 있다.
-
미해결SQL 시작도 못한 분들 드루와요
저도 추출이 안되어 문의드립니당..!
저도 이렇게 입력하였는데 오류로 노출되어.. 확인 부탁드리겠습니댜🥹
-
미해결다양한 사례로 익히는 SQL 데이터 분석
퍼널 질문드립니다.
안녕하세요해당 데이터셋에는 퍼널의 순서가 있다보니 각단계별 전환율을 구할 수 있었는데요, 다른 데이터의 경우 퍼널의 순서가 없다면 어떻게 분석을 해야할까요? 예를들어 "로그인 > 장바구니 >구매"순서가 아닌"로그인 > 구매" 이렇게 장바구니와 구매를 선택할수 있는 허브역할을 할 수도 있다고 생각되는데요.이부분에서 개인적으로 공부하는데 막히더군요
-
미해결실무 활용 SQL 데이터 분석: 효율적인 데이터 처리와 인사이트 도출
12_5 질문3
3번 질문에서 1년 동안 완전히 이용 가능한 listings를 찾기 위해서 SELECT COUNT(DISTINCT id)FROM openairbnb.listings AS lWHERE l.availability_365 = 365;1년 이용가능한 날이 365일인 고유한 id를 추출하는 쿼리를 이용하면 왜 답이 다르게 나온건지 모르겠습니다.
-
미해결실무 활용 SQL 데이터 분석: 효율적인 데이터 처리와 인사이트 도출
12_6강 질문
4번 문제를 혼자 먼저 풀어볼 때,SELECT COUNT(DISTINCT l.id)FROM openairbnb.listings AS lWHERE l.availability_365 = 0;이렇게 풀어서 같은 답이 나왔는데 해답에서는 서브쿼리를 이용하는 이유가 뭔지, 차이점이 있는지 궁금합니다.
-
미해결
[스터디 모집] 3월 8일 SQLD 자격증/시험 준비 + 합격할 분
2025년 첫 SQLD 시험 응시 + 합격까지 할 분 찾습니다!혼자 공부하는 게 막막한 분들을 위해 '유데미 러닝크루' 온라인 스터디로 함께 공부/스터디 해서 합격까지 GOGO 해요 🙂 ▶ SQLD 합격반 : https://bit.ly/42LgSSa 강의 : 강의는 유데미 강의로 진행됩니다. 현재 본인 상황에 따라 강의를 선택/구매 후 각 희망하는 강의실 입장 시 '유데미 러닝크루'로 확인 부탁드릴게요! (스터디는 강의별로 진행됩니다) 노베이스 / 비전공자 - 정미나 <노베이스를 위한 SQLD> (유선배 SQL개발자 저자) 단기 공부 + 실무 역량 업그레이드 목표 - 김경수 <SQLD 제대로 배워 한번에 따는 자격증> (10년차 DB 컨설턴트) 스터디 모집 기간 : 2025-02-05 ~ 2025-02-14 (선착순 모집 / 모집 완료 시 모집 종료) 추가 혜택 : SQLD 스터디 모집 기념 20% 할인 + 2주/4주 스터디 플랜 제공, 그리고 시험 전 SQLD 강사님 Q&A 라이브 특강까지 진행되니 같이 합격까지 도전해요 자세한 이벤트 내용은 아래 링크 확인 부탁합니다. 😉 ▷ 러닝 크루 신청하기 (SQLD 강의실 입장 시 확인 가능) : https://bit.ly/42LgSSa
-
해결됨오라클 SQL 데이터베이스
(HTTP code 500) server error - Ports are not available 에러가 나옵니다.,
학습 관련 질문을 남겨주세요. 자세하게 남겨주면 더 좋습니다. 안녕하세요 docker 설치하고 말씀하신 이미지 다운받아 실행하니 이미지와 같이 포트를 허용할수 없다는 에러가 나옵니다.gpt보며 이거저거 해보았는데 방법이 잘못되었는지 해결이 되지 않습니다. 혹시 어떻게 하면 되는지 알려주시면 감사하겠습니다.
-
해결됨[백문이불여일타] 데이터 분석을 위한 중급 SQL
INNER JOIN 질문. 강의와 결과값이 다릅니다.
분명히 강의와 똑같이 작성한 것 같은데, 강의와 다르게 컬럼이 추가로 나타납니다.갈수록 이런 경우가 너무 많이 보이는데... 안내 좀 부탁드립니다. 이 부분은 에러로 출력됩니다.
-
미해결실습으로 손에 잡히는 SQLD의 정석(2과목)
mac에서 colima
colima start ~ 명령어 실행해도 실행이 안되네요혹시 최신 맥 기준으로 한번 확인해봐주실 수 있나요?docker context에서도 colima가 안잡혀요...
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
mysql 설치가 되지 않습니다.
아래와 같은 에러로 mysql의 설치가 되지 않습니다. 분명, 제어판에서 mysql을 모두 삭제하고 다시 재설치를 진행하였는데도 불구하고, 계속해서 에러가 발생하여 강의 진행이 어렵습니다. Beginning configuration step: Writing configuration file Saving my.ini configuration file... Saved my.ini configuration file. Ended configuration step: Writing configuration file Beginning configuration step: Updating Windows Firewall rules Adding a Windows Firewall rule for MySQL92T on port 3306. Attempting to add a Windows Firewall rule with command: netsh.exe advfirewall firewall add rule name="Port 3306" protocol=TCP localport=3306 dir=in action=allow 확인됨 Successfully added the Windows Firewall rule. Adding a Windows Firewall rule for MySQL92T on port 33060. Attempting to add a Windows Firewall rule with command: netsh.exe advfirewall firewall add rule name="Port 33060" protocol=TCP localport=33060 dir=in action=allow 확인됨 Successfully added the Windows Firewall rule. Ended configuration step: Updating Windows Firewall rules Beginning configuration step: Adjusting Windows service Attempting to grant the required filesystem permissions to the 'NT AUTHORITY\NetworkService' account. Granted permissions to the data directory. Granted permissions to the install directory. Adding new service New service added Ended configuration step: Adjusting Windows service Beginning configuration step: Initializing database (may take a long time) Attempting to run MySQL Server with --initialize-insecure option... Starting process for MySQL Server 9.2.0... Failed to start process for MySQL Server 9.2.0. Database initialization failed. Ended configuration step: Initializing database (may take a long time)
-
미해결핵심만 쉽게, 모두의 SQL 데이터 분석
함수 중첩: 단일행함수 문자타입 함수
함수 중첩 관련하여, upper, substr 같이 쓰는 예시를 보여주셨는데, 결과값이 똑같다면, 뭘 먼저 적용할지의 선택에 대한 기준이 혹시 있을까요? (그냥 떠올려 봤을 때 예를 들어 구글빅쿼리에서 실행 시, 같은 결과값이면, 이렇게 하는게 데이터 비용이 더 절약된다던가, 하는 건 없겠죠..?)
-
해결됨[백문이불여일타] 데이터 분석을 위한 중급 SQL
END, 뒤에 * 붙이면 에러가 뜹니다
안녕하세요, 섹션3 조건문 type of triangle 문제에서 질문있습니다.END, 뒤에 *를 붙이면 꼭 에러가 뜹니다. 해커랭크 뿐만아니라 W3스쿨에서도 그러던데 확인 좀 부탁드립니다. 다른 분들도 유사한 질문을 하신 것 같은데, 확인되면 수업 노트 보기에서라도 확인할 수 있게 내용 추가 좀 해주시면 감사하겠습니다. SELECT *, CASE로 할 경우에는 정상 출력되긴 하더라고요.