kyleschool
@kyleschool
Học viên
15,009
Đánh giá khóa học
572
Đánh giá khóa học
4.9
10년차 데이터 과학자, 데이터 엔지니어, 머신러닝 엔지니어로 근무했으며, 쏘카와 타다에서 데이터 분석, 데이터 엔지니어링 개발, 머신러닝 알고리즘을 개발했습니다.
카일스쿨 유튜브에 데이터 커리어 관련 영상을 올리고 있으며, 어떻게 해야 강의를 수강하신 분들이 회사에서 일을 잘할 수 있을까?를 고민하며 자료를 만들고 있어요.
Google의 GDE(Cloud)로 활동하고 있어요.
카일스쿨 유튜브 : https://www.youtube.com/c/kyleschool
기술 블로그 : https://zzsza.github.io/
인스타그램 : https://www.instagram.com/data.scientist/
대표 컨텐츠 : https://github.com/Team-Neighborhood/I-want-to-study-Data-Science
데이터 과학자가 되기 위해 진행한 다양한 노력들 : https://zzsza.github.io/diary/2019/04/05/how-to-study-datascience/
Khóa học
Đánh giá khóa học
- Hiểu biết về dữ liệu dành cho PM (Phân tích dữ liệu sản phẩm)
- Nhập môn BigQuery(SQL) cho người mới bắt đầu
- Nhập môn BigQuery(SQL) cho người mới bắt đầu
- Nhập môn BigQuery(SQL) cho người mới bắt đầu
- Nhập môn BigQuery(SQL) cho người mới bắt đầu
Bài viết
Hỏi & Đáp
6-7. 데이터 로그설계 연습 문제 제출합니다!
솔의눈님 안녕하세요. 지금 작성해주신 것 보고 있어요. 이번 주말까지 답변 드릴게요!!
- 0
- 2
- 42
Hỏi & Đáp
4-8. 지표 정의 연습 문제 피드백 부탁드립니다!
기원님 안녕하세요. 자세히 고민해주셨네요! 고생하셨어요. 하나씩 피드백 드려볼게요. 연습문제 #1. 기능이 잘 동작하고 있는지 확인하려면?각 영역에 대한 목적정의공통목적: 우선적으로는 사용자가 음식점 및 메뉴를 탐색 및 발견할 수 있도록 해주는 것이고, 결과적으로는 장바구니에 넣고 결제까지 이어지도록 해주는 것.배너: 다양한 프로모션, 할인혜택 등을 확인하고 ‘이벤트성 혜택'을 제공메뉴 카테고리: 사용자가 특정 메뉴를 탐색할 시 카테고리 진입을 통해 탐색 범위를 좁혀줌이런 음식은 어때요?: (사용자 데이터를 기반으로 추천한다고 가정) 사용자가 자주 먹는 음식이나 들여다보았던 메뉴 등을 추천하여 반복탐색과정의 피로를 줄임동네맛집: 픽업을 하거나, 배달소요시간이 중요하거나, 위치에 따라 적어지는 배달료등을 중요하게 생각하는 사용자에게 위치정보를 최우선적으로 고려한 가맹점을 보여줌확인해야할 지표와 정의A. 각 영역(배너, 메뉴카테고리, 음식추천, 동네맛집) 별 공통 지표영역별 CTR지표정의: 홈 화면 영역별 CTR (영역 클릭 / pv) 이유: 관심 및 반응 확인을 확인하게 위함 잘 동작한다의 시그널: CTR이 상승 및 유지. 그러나 다음 나올 2,3번도 같이 좋아져야 유효.각 영역 클릭 → 다음 퍼널 진입률지표정의: (홈)영역클릭 - (음식점 화면, 세부화면, 장바구니 화면 등등) - 결제완료 퍼널 이유: 특정 퍼널 진입 후 다음 단계로 전환율이 낮을 경우 어떤 지점에서 이탈하는지 파악하기 위함영역 유입 주문 전환율정의: 영역 별 주문 CVR (주문완료/영역 유입 수) 이유: 해당 영역이 실제 결과인 ‘주문'에 기여하는지 확인하기 위함영역 유입 주문/매출 기여 (Output)정의: 매출 (영역 유입 매출 / 전체 매출) 이유: CTR이 낮더라도 매출기여가 크면 전략적으로 중요한 영역일 수 도 있음이 부분까지 써주신 부분은 목적이랑 지표에 대한 고민을 잘 해주신 것 같아요. 분자 분모로 써주신 부분도 좋아요.의견을 드리자면 잘 동작한다를 명확히 정의하면 같은 지면에서 지표 정의가 편해집니다. 저라면 해당 화면에서 잘 동작하면, 고객이 클릭을 할 것이다. 따라서 클릭률 지표를 보겠다(CTR)라고 하고, 각 지면마다 클릭률 지표를 비교할 것 같아요.같은 페이지에서 같은 지표를 써야 비교가 가능합니다. 배너별, 메뉴 카테고리별, 음식 추천 별, 동네 맛집별 CTR이 나온다면 각각을 보고 비교를 할 수 있지요. 그래서 공통적으로 쓸 수 있는 지표를 고려해보는 것도 필요합니다(결국 비교를 하기 위함이니)2의 다음 퍼널 진입률 같은 지표를 볼 수는 있는데, 이렇게 보다보면 다음다음의 퍼널 진입률은? 고민할 수 있습니다. 따라서 저라면 여기선 CTR을 메인으로 보고 CVR을 보조적으로 활용할 것 같아요. 많은 지표를 보는 것이 답이 아니라서요B. 영역별 보조지표 (Sub Metric)배너(프로모션/혜택)지표) 혜택적용율 (혜택적용/주문완료) 이유) CTR은 상승하나 실제 주문완료율과 함께 혜택적용율이 적으면 혜택 등의 안내가 잘 안될 가능성이 있음이런 음식 어때요? (목적: 사용자기반 추천을 통해 반복탐색과정의 피로를 줄임)지표) 주문까지 걸리는 시간 (이런음식 어때요 영역 클릭 후 주문까지의 duration time / average 주문완료시간) 이유) ‘피로 감소'의 목적을 달성하는지 평균 주문시간과 비교하여 정량적으로 확인하기 위함동네맛집지표) 동네맛집의 평균 배달비 (동네맛집의 평균 배달비/전체 평균 배달비) 지표) 동네맛집 평균 주문완료율 (동네맛집의 주문완료율 / 전체 주문완료율) 이유) ‘거리/시간/배달료가 중요한 사용자에게 제공하는 것이 목적' 이라는 가설을 정량화하여 검증하기 위해 해당 가치들이 실제 선택으로 이어지는지 확인하기 위함이 보조 지표들은 "이 기능이 잘 동작하는가?"와 직접적인 관계가 있냐고 하면 약간 목적이 있는 지표들 같아요. 말씀하신 지표들은 운영성 지표라고 분류할 수 있는데, 운영할 때 반복적으로 봐야 하는 지표입니다. 다만 이 문제에서는 이 지표까지 고려하면 너무 많은 지표를 보고 있는거라 의사결정이 더 어려워 질 수 있습니다.배너를 담당하는 마케팅팀에서 혜택 적용율 지표를 파악할 수는 있지만, 제품이 잘 동작하느냐 관점에선 거리가 있습니다이런 음식 어때요에서 주문까지 걸리는 시간은 추천 알고리즘을 개발하는 팀에서 고려할 수 있으나, 추천 알고리즘에선 시간 지표보단 CTR이나 CVR, Recall Precision 등 관점으로 봅니다동네 맛집에서 평균 배달비라는 지표를 운영팀에서 볼 수는 있으나, 평균 배달비 지표를 봐서 뭐할건데?라는 질문에 Action Item이 떠오르는지 고민해보시면 좋을 것 같아요.C. 가드레일 지표전체 주문 전환율 (홈→주문완료)리텐션이유: 장기적으로 주문 전환율이 줄고 이탈율이 발생하면 안됨 (배달 앱 특성 상 전환율이 낮은데 매출이 상승하는 전략을 기대하기 어렵다고 생각하고, 유저의 수 가 더 직접적으로 매출과 직결될 것 같다는 가설을 세워봄)리텐션이 많이 나오는 지표인데, 정의를 구체적으로 해야 합니다. Day 1 클래식 리텐션인지 이런 구체적인 정의가 필요한데, 리텐션이라는 지표는 나오는데 시간이 오래 걸릴 수 있습니다(데일리 서비스가 아닌 경우라면 이 지표를 보기 위해 주간, 월간이 지나야 볼 수 있습니다)그래서 보통 서비스의 매출이나 API의 레이턴시 등을 가드레일 지표로 많이 활용합니다. 연습 문제 #2. 검색만족도 지표검색 기능의 목적: 사용자가 입력한 쿼리에 대해 원하는 메뉴/음식점을 빠르고 정확하게 찾도록 돕는 것.---사용자의 검색 흐름:검색 키워드 입력 - 검색결과 탐색 - 결과 클릭 - 음식점/메뉴 상세 - 장바구니 담기 - 주문완료---검색 기능에 대한 만족의 정의:원하는 결과를 찾는 것최소한의 탐색만으로 해결이 되는 것재검색을 반복하지 않는 것검색이 주문까지 이어지는 것---만족했는지 확인하기 위한 메인 지표:재검색율 (재검색 세션 수 / 검색 세션 수)지표 선정 이유: 재검색 세션 수가 낮을 수록 검색결과가 정확하게 나왔다고 해석할 수 있음, 반대로 많으면 사용자가 기대하는 결과와 불일치 한다고 생각할 수 있음검색 - 주문 전환율 (검색 세션 중 주문 완료 수 / 검색 세션 수)지표 선정 이유: 검색 결과가 실제 주문(행동)으로 이어지는지 확인하기 위함 고려사항: 가격이나 리뷰 등 요소나 주문 전까지의 ux요소 등 검색-주문 퍼널에서 전환율에 영향을 주는 다른 변수들이 존재할 가능성이 높기 때문에 단독 사용 시 해석의 오류가 있을 수 있을 것 같음---보조지표검색 페이지 내 상위 결과 클릭률 (Top 3 결과 클릭 수 / 검색 세션 수)지표선정이유: 상위에 사용자의 의도와 일치하는 결과가 배치되었는지 확인하기 위함 (결과 정확도 측면)세션 당 평균 검색 횟수 (검색 수 / 검색 세션 수)지표선정이유: 1번과 비슷한 이유 (결과 정확도 측면)---가드레일 지표전체 주문 전환율전체 리텐션지표선정이유: 검색 최적화가 다른 퍼널에 악영향을 주지 않는지 확인. 재검색이 낮을수록 검색 결과가 정확하게 나왔다고 해석할 수 있다고 하셨는데, 검색 결과가 정상일 때를 가정하고 말씀하신 것 같아요. 검색 결과의 퀄리티가 어떻게 되는지에 따라서 이 가정이 달라질 수도 있어요. 만약 검색 결과가 아무것도 나오지 않았다면? 그러면 재검색을 다시 할 수도 있지요. 근데 이게 과연 검색 결과가 정확할까?라고 하면 다른 문제가 됩니다. 그리고 검색 결과가 얼마나 보이는지도 고려해야 하는데, 이런 알고리즘의 문제들은 이미 많이 사용되는 지표들이 있습니다. 그래서 이런 지표들을 한번 검색해보면 좋겠다는 의도로 낸 문제입니다. 보조지표에 써주신 것과 관련이 됩니다.제품 관점에서는 검색에서는 CTR/CVR 지표를 많이 봅니다. 좋으면 -> 클릭한다 -> 결제한다라는 가정을 가지고 있어요. 가드레일 지표에 전환율 리텐션이 계속 나오는데, 어떤 시점의 전환율이나 어떤 시점의 리텐션이냐에 대한 정의가 없어서 추상적이네요. 지표 정의할 땐 항상 구체적으로 작성을 해줘야 해요(밑에서도 계속되는 패턴이네요)검색 지표 참고 : https://techblog.musinsa.com/map-416b5f143943연습 문제 #3. 검색 필터 기능의 활성화 지표검색필터의 목적 정의:검색 결과의 적합도를 높여 탐색 시간을 줄이고 재검색을 감소시키며 주문 전환율을 높이는 것성공지표:필터 사용 세션의 재검색률 (필터 사용 세션 중 재검색 발생 세션 수 / 필터 사용 세션 수) -실제로 필터가 정확도 높은 결과를 제공하는지 알기위함.필터 사용 세션 재검색율 vs 필터 미사용 재검색율 - 필터를 통한 결과가 유의미한지 알기위함필터 사용 세션의 장바구니 전환율 (필터 사용 세션 중 장바구니 전환 수 / 필터 사용 세션 수) - 필터가 구매의사 결정에 실제로 영향을 주는지 알기위함보조지표:필터 사용률 (필터 적용 수 / 검색 세션 수)검색-장바구니에서의 필터 사용 세션 duration (필터 사용 세션의 평균 duration / 전체 평균 duration)가드레일 지표:전체 주문 전환율전체 매출검색 미사용 세션 전환율리텐션 여기선 목적이 간다합니다. 검색이 잘 사용되는가? -> 잘 사용된다면? -> 클릭을 한다사람들이 필터 페이지에서 얼마나 클릭하고 있는가를 비율로 표현하면 CTR이 됩니다. 이 CTR을 먼저 보는 것이 중요합니다. "검색 필터"라고 한정했기에 필터에 대한 생각만 하면 됩니다. 필터 사용 세션의 재검색률은 검색을 할 때 필터를 사용했냐 여부인데 검색 필터 사용량과 살짝 거리가 있는 지표라 생각되네요.지금 성공지표에 있는 지표를 차라리 보조지표로 정의할 것 같요, 보조지표는 사용하지 않을 것 같아요. 작성해주신 것을 보니 지표에 대한 생각이 많으신 편인데, 내가 생각한 것보다 지표를 더 줄여보자고 생각해보셔도 좋을 것 같아요. 저는 프로젝트를 할 때 메인 지표 1-2개, 보조 지표 2개 정도만 둡니다. 연습 문제 #4. 배달 서비스에서 가장 중요한 지표는?배달 서비스에서 가장 중요한 지표란 뭘까?보편적으로 가장 중요하다는 것은 해당 지표의 영향으로 인해 output metric이 긍정적으로 상승한다는 것 (매출, 리텐션 등)일 것이다. 배달 서비스는 트래픽이 유지되어야 가맹점들도 사용할 것 이고, 가맹점 수가 많아야 트래픽도 유지될 것 인데, 줄어드는 순간 시스템적으로 성장이 힘들고 정체할 가능성이 있으며 리텐션에도 영향을 줄 수 있다는 가설을 세움.중요한 지표:주문 빈도 (Active User 당 주문 수)주문 수 (전체 주문 수)이유: 사용자 규모, 리텐션, 구매의도를 종합적으로 반영한 지표라고 생각.위 지표들을 어떻게 늘릴 수 (줄일 수) 있을까요?퍼널 분석을 통해 이탈률이 높은 지점을 파악하고 이 지점의 문제를 정의하고 성공지표를 정의한 뒤, 해당 지표 달성을 위한 서비스 개선을 해야함.구체적으로는, 검색/탐색 퍼널을 최적화 시켜서 첫 주문 전환율을 개선시킨다거나, 개인화 추천 및 프로모션을 최적화 한다거나, 재주문 UX 개선으로 주문빈도를 늘린다거나 등. 배달 서비스라는 비즈니스에서 중요한 것을 물어본 것은, 비즈니스에서 배달 서비스에서만 나올 지표가 무엇이냐?라는 질문을 던지기 위함이였습니다. 배달 서비스라고 하면 일단 배달을 요청하는 수가 있을 것이고, 배달 완료된 수가 있을 겁니다. 이 두가지 지표가 Input Metric으로 볼 수 있고, 가장 중요한 지표라고 할 때 Output보단 Input을 생각해보시는 것을 추천합니다. Output을 생각하면 결국 매출이라고 말하는 경우가 많습니다주문 빈도라는 지표를 써주셨는데 빈도라는 단어는 "같은 현상이 되풀이되는 도수"라는 말이라 Active User 당 주문 수랑 맞지 않네요. 저라면 1주일에 고객이 얼마나 주문하는가? 이런 개념이 주간 주문 빈도라는 지표와 맞게 될 것 같아요.지표가 나오면 해당 지표랑 관련해서 지표를 늘릴 아이디어를 생각해보면 좋습니다 .지금 지표를 늘리는 방법에서는 또 퍼널 분석이 나옵니다. 지표와 Action Item이 같이 가야 합니다. 위에서 쓴 지표를 늘리는 것을 고민해야 합니다. 써주신 것에선 주문 빈도를 어떻게 늘릴까?에 대해 고민을 해야 하는 것이에요. 연습 문제 #5. 추천 알고리즘의 성능 지표추천알고리즘의 성능을 확인한다는 것 = 추천알고리즘기능의 목표를 달성하냐는 것.추천알고리즘의 목적 : 유저의 정보와 유저 로그를 토대로 구매할 것 같은 제품을 보여줌 추천알고리즘이 제대로 작동한다는 것 은?유저의 정보를 제대로 파악?유저의 로그를 제대로 파악?유저의 정보 및 로그가 추천하는 제품과의 연관성이 뚜렷함?유저가 추천 제품에 관심을 가짐?유저가 추천받은 제품이 실제 구매로 이어짐?구매로 많이 이어짐?유저가 추천 제품에 관심은 보였지만 실제 구매는 안함?추천 제품이 자연 탐색 제품 대비 구매율을 높임?이 것들을 확인하기 위해 어떤 지표를 파악해야할까요? 왜 해당 지표일까요?메인지표:추천 제품 CTR/pv (추천제품의 1차적인 관심도를 확인하기 위함)추천제품유입 구매 CVR (추천 제품 유입 구매율/전체구매율) - 실제 추천 제품이 구매까지 이어지는지 확인하기 위함보조지표:추천 노출 제품의 구매율 (추천노출제품 구매율 / 추천 노출 수)자연 노출 제품의 구매율 (자연 노출 제품의 구매율 / 추천 미노출 수)지표해석 (멘탈시뮬):만약 CTR은 높지만 CVR이 낮다면, 관심도는 높지만 실제로 구매까지 전환되지는 않는다는 것이고, 전환이 안된다는 것은 제품 클릭 전 initial기대치가 상세에서 충족되지 못하거나, 실제 가격, 배송비 등 다양한 변수 때문에 전환이 안된다고 가설을 세울 수 있음만약 CTR이 낮은데 CVR이 높다면 실제로 알고리즘은 잘 작동하지만 초반에 사용자의 관심을 제대로 끌지 못할 가능성이 있음. 이를 위해 관심을 더 끌기위한 전략을 세울 수 있을 것 같음.만약 CTR과 CVR이 모두 낮다면, 사용자가 추천제품에 관심이 없다는 뜻이고, 그렇다는 건 알고리즘이 제대로 작동하지 않는다고도 해석 할 수 있음. CTR/pv는 무엇인가요? CTR과 PV를 나눈다는 의미일까요? CTR 자체가 이미 분모에 PV가 들어갈텐데 CTR/pv가 보여서 이게 어떤 것이지?라는 생각이 드네요. CTR = 클릭 수 / Page View 수 이렇게 정의할 수 있는데 이걸 의미하셨을까요(구체적으로 작성하되 누가봐도 헷갈리지 않도록 지표를 정의하는 것이 필요합니다)추천 알고리즘에서 CTR, CVR을 많이 사용하고, 알고리즘 자체의 성능을 평가할 때는 Precision, Recall 등에 대해 살펴보셔도 좋을 것 같아요.https://sungkee-book.tistory.com/11 연습 문제 #6. 자주 사용하는 서비스의 지표자주 사용하는 서비스: 오늘수거서비스개요: 사용자가 문 밖에 쓰레기봉투 안에 쓰레기를 넣고 수거요청을 하면, 밤 10시 이후 쓰레기를 수거해가고 무게에 따라 사용자에게 요금을 청구함.북극성지표: 우선 이 서비스의 북극성 지표는 반복사용과 연관된 지표일 것 같음. 우선 이 서비스의 수익 구조는 (활성 사용자 수 x 사용자당 수거 빈도 x 평균수거금액) 임. 그렇기 때문에 이 서비스는 사용이 해빗화가 되어야하고 (반복 사용), 생활 습관에 녹아들어야하는게 중요함. 그래서 결국 ‘반복 수거 신청'이 제일 중요할 거 같고, 또 쓰레기를 버리는 루틴을 봤을 때 주간 사용자들을 보는게 중요할 것 같음. 그래서 북극성 지표는 ‘WAU 중 주간 신청 완료율 (주간 수거 신청 완료 수 / 주간 활성 사용자 수)로 정의할 것 같음.메인 지표:수거 신청완료 전환율 (수거신청 완료 수 / 수거신청버튼 클릭 수)주간 리텐션보조지표:수거신청버튼 CTR (수거신청 버튼 클릭 수/ 홈 uv)혜택 사용 수거신청 CVR (혜택사용수거신청 수 / 전체 수거신청 수)이 문제에선 북극성 지표나 메인 지표가 동일하게 나와야 합니다. 서비스의 지표를 물어본거라서요. 동일한 개념이 2번 반복되는데(북극성, 메인이 유사한 의미라는 말) 써주신 지표가 다르네요.WAU 중 주간신청 완료율이란 지표는 조금 더 잘 작성한다면, "주간 쓰레기 수거 요청 비율"이라고 작성할 것 같아요. WAU 중 뭐다 이러면 지표를 보는 사람 입장에서 헷갈리거든요.(WAU? 중?) 비율 지표를 볼 것이냐도 고민해야 하는데, 비율 지표는 값이 작을 땐 확확 바뀔 수 있습니다. 그래서 저라면 오늘수거 서비스에선 쓰레기 요청 수를 더 메인으로 볼 것 같고, 보조지표로 WAU을 추가해서 두개를 조합하는 값도 보되, 절대값을 먼저 볼 것 같아요. 그러다가 절대값이 어느정도 크면 그 때 비율로 볼 것 같네요(비율 지표가 항상 정답은 아닐 수도 있다는 의미에요)연습 문제 #7. 퍼널 개선 프로젝트현재 가입 퍼널 프로세스의 전환율: 20%미션가입 퍼널을 개선해야함온보딩 기능의 효과를 파악해야함 미션을 달성한다면?온보딩 기능이 효과적이고 가입 퍼널이 개선된다면? - 가입 완료율이 높아지고, 가입한 사용자의 ‘질'이 높을 것 (질이 낮은 사용자는 바로 이탈하거나, 유령사용자 등)지표상으로 어떻게 파악해야 하나?메인지표: 가입 CVR (가입완료 수 / uv)보조지표: 온보딩 퍼널 단계별 전환율온보딩 진입 수 / 이전 단계 수온보딩 완료 수 / 온보딩 진입 수가입 완료 수 / 온보딩 완료 수가드레일 지표:가입 완료 후 초기 활성화 (가입 후 일주일 내 서비스 사용 수 / 가입완료수) 가입 퍼널의 목표를 생각해야 하는데, 가입 퍼널의 목표는 결제까지 가면 당연히 좋겠지만 우선 가입까지 가는지가 중요합니다. 그래서 메인지표의 CVR이 보조 지표로 가고, 보조지표에 있는 단계별 전환율을 메인지표로 보는 것이 좋을 것 같아요. 또한 이 문제는 AB Test를 해야 명확하게 알 수 있는 부분이라 실험 부분의 강의를 들어보시고 다시 보시면 좋을 것 같아요 전체적으로 지표에 대한 생각을 많이 하신 것 같은데, 연습하는 과정에서 많이 생각해보면 도움이 됩니다. 다만 좀 많이 생각하는 부분도 있는 것 같아서 "간단하게 생각해보자"라는 생각을 가지셔도 좋을 것 같아요. 지표가 많다고 답이 아니라는 부분이 중요합니다
- 0
- 3
- 69
Hỏi & Đáp
강의 수강 목적입니다!
해성님 파이팅입니다!!!!! 다 수강하셔서 원하는 것 꼭 얻으시길 바라요
- 0
- 2
- 30
Hỏi & Đáp
4-8. 지표 정의 연습 문제 피드백 부탁드립니다!
기원님 안녕하세요! 작성해주신 것 하나씩 보고 있는데, 시간이 조금 걸리네요. 일요일까지 답변 드릴게요!
- 0
- 3
- 69
Hỏi & Đáp
4-5. 3번 문제 질
설아님 안녕하세요. 현재 쿼리를 살펴보면, SELECT # A trainer_id, FORMAT_DATE ('%d/%m/%Y', MIN_date) AS form FROM ( SELECT # B MIN(catch_date) AS MIN_date FROM( SELECT # C trainer_id, catch_date FROM 'basic.trainer_pokemon" ORDER BY trainer_id, catch_date ASC) GROUP BY trainer_id ) GROUP BY trainer_id 이런 형태고, SELECT에 제가 A, B, C 라고 작성했어요.쿼리문에서는 아래에 있는 쿼리(안쪽에 있는 쿼리)에 있는 컬럼을 바깥쪽 쿼리에서 사용할 수 있어요. 즉, C에 있는 SELECT문에 있는 컬럼을 B에서 사용할 수 있고, B SELECT문에 있는 컬럼을 A에서 사용할 수 있습니다. 지금 쿼리는 서브쿼리를 쓴 것이 문제가 아니고, B에서 MIN(catch_date)만 하셔서 trainer_id 컬럼이 없어서 그래요. 근데 그 쿼리문 보면 GROUP BY엔 trainer_id가 있네요. 아마 집계할 때 GROUP BY를 쓴다는 것은 잘 이해하신 것 같은데, SELECT에도 집계 컬럼을 놓치신 것 같아요.SELECT trainer_id, MIN(catch_date) AS MIN_date FROM Table GROUP BY trainer_id 이렇게 쓰면 안쪽의 SELECT에 trainer_id가 있어서 사용할 수 있습니다.에러 메세지가 Unrecognized name: trainer_id at [13:3]인데 이 에러를 해석하면 trainer_id라는 이름을 인식하지 못했다는 것을 의미합니다. 인식하지 못했으면 SELECT에 있나 확인해보면 됩니다. 정리하면에러 메세지 읽어보기. 인지를 못한다면 SELECT를 안하고 있을 것GROUP BY를 할 때 GROUP BY 뒤에 나오는 집계 기준을 SELECT에도 써줘야 함안쪽에 있는 쿼리문에 있는 컬럼만 바깥에 있는 쿼리에서 사용할 수 있음 이 부분을 이해하시면 더 좋을 것 같아요. 강의하면 이 부분을 자주 물어보는 내용이에요. 추가로 ORDER BY는 쿼리의 안쪽보다 바깥쪽(마지막)에 쓰는 것이 더 좋습니다. 안쪽에서 ORDER BY를 해서 정렬해도 바깥에서 정렬이 깨질 수 있거든요. 정렬이란 것은 모든 값을 다 확인해야 하기 때문에 연산 부하가 있는 편입니다. ORDER BY를 지금 안쪽에 쓸 이유가 없으니 바깥에서 쓰시면 됩니다!
- 0
- 2
- 29
Hỏi & Đáp
JOIN 1번 문제
안녕하세요.tp.id vs p.id 이 부분은 법칙이 있는 것은 아니고 데이터를 보는 목적에 따라 달라집니다.tp의 id는 trainer_pokemon의 id고, p.id는 pokemon의 id입니다. 즉, 트레이너가 포켓몬을 잡은 수를 알고 싶다면 tp.id를 세는 것이 더 맞을 수 있고, 포켓몬의 수를 알고 싶다면 p.id를 사용하면 됩니다. 두개의 차이를 제대로 이해하면, 어떤 차이가 있는지 이해할 수 있어요. p.id를 COUNT할 때는 포켓몬에 피카츄, 피카츄, 라이츄, 라이츄, 파이리 이렇게 있을 수 있는데 p.id는 포켓몬의 수를 세는 것이고, DISTINCT p.id로 하면 피카츄, 라이츄, 파이리만 남겠죠(더 정확히는 피카츄, 라이츄, 파이리의 id만 남아요). 반면에 tp.id는 트레이너가 잡은 포켓몬을 의미해서 DISTINCT tp.id를 해도 Unique하게 됩니다. 그래서 3개의 질문에 대한 답은 "지금 추출하려고 하는 것이 무엇인지 정확히 생각하고 그거에 맞게 사용해야 한다"고, "tp와 p의 id의 차이점을 제대로 이해하는 것이 필요합니다"라고 답변드릴게요. 그래서 보편적으로 뭘 선택한다 이런 관점보단 상황에 따라 다르다라는 관점으로 이해하시면 될 것 같아요. 지금 케이스는 tp.id와 p.id를 DISTINCT하지 않고 COUNT를 했고, JOIN 할 때 1:1 매칭을 했기 때문에 동일한 값이 나오는 상황이고 JOIN이 더 복잡해지거나 하면 id를 잘 선정하는 것이 중요합니다. 연습 문제 중에도 id를 잘 선정해야 하는 문제가 있으니 나중에 풀어보면서 익히시면 좋을 것 같아요(몇 번인지는 알려드리면 스포가 되어서 알려드리진 않을게요)
- 1
- 2
- 38
Hỏi & Đáp
battle 테이블 생성 시 생성 오류
안녕하세요. 혹시 이미 배틀 테이블이 존재하나요? 존재한다면 기존 테이블을 삭제하고 해야 합니다. 설정을 어떻게 했는지 보여주셔야 원인 파악이 가능해요
- 0
- 1
- 31
Hỏi & Đáp
5-6. 4번 문제 WHERE 조건의 위치 문의
안녕하세요. 지금 하신 방법이 쿼리 최적화 방식으로는 더 좋은 방법일 수는 있습니다. 미리 가공해서 필요한 것만 JOIN한 것이니 잘 생각하셨어요. 제가 Master를 마지막에 필터링한 이유는 JOIN한 결과를 어떻게 사용할 것인가? 관점에서 Master만 필터링하지 않고 다른 등급의 트레이너를 파악해야 하는 경우 쿼리의 맨 마지막에서 바꿔주는 것이 더 편하기 때문에 이렇게 작성했다고 보시면 됩니다. 단순히 쿼리를 짜는 것이 다가 아니라, 그 쿼리의 결과를 어떻게 사용할지 필터링을 잦게 해야 한다면 어디에 배치할지를 고민하는 것이 필요합니다. 그래서 인프님 쿼리나 제 쿼리의 의도의 차이가 있다고 생각해주시면 될 것 같아요.
- 0
- 2
- 41
Hỏi & Đáp
5-6. 연습문제 4번, type2에 대해서는 고려하지 않아도 될까요?
인프님 안녕하세요. 현재 문제의 의도는 type1만 고려하는 것을 의도에 둔 문제긴 합니다. JOIN을 하고 집계를 할 수 있는가? 관점을 보기 위한 문제라서요 말씀하신 경우라면 CONCAT 함수로 type1, type2을 합치거나, UNION ALL을 사용해서 합집합으로 쓰는 방법, CASE WHEN을 사용해서 푸는 방법 등 다양할 것 같아요. 예시 쿼리도 드리면CONCAT 함수 사용 예시SELECT id, name, CONCAT(type1, IFNULL(CONCAT('&', type2), '')) AS combined_type FROM basic.pokemon UNION ALLSELECT type, COUNT(*) AS cnt FROM ( SELECT type1 AS type FROM basic.pokemon UNION ALL SELECT type2 AS type FROM basic.pokemon WHERE type2 IS NOT NULL ) GROUP BY type ORDER BY cnt DESC
- 0
- 2
- 47
Hỏi & Đáp
BigQuery 활용편 18강 질문있습니다!
안녕하세요!강의 잘 수강해주셔서 감사합니다. 해당 부분은 매개변수를 만들기 위해서 시트1에 새로운 값을 작성하고, 그 범위를 지정한 것입니다. 그래서 지금 보이는 화면의 셀이 아닙니다.시트1에 값이 아무것도 없을텐데 저는 B3에 값을 넣었다고 지정하고, 제가 직접 2022-08-01을 입력한 거예요. 13:20분에 이렇게 말합니다 : "시트1이 아무것도 없는 칸이였는데 시트1에 start_date, end_date를 추가했어요" 이게 그 의미에요. 매개변수를 시트1 탭에 추가하고 연결된 시트의 쿼리 편집기에서 매개변수 -> 추가해서 해당 범위를 지정했다고 생각해주시면 됩니다!! 기술적이여도 궁금하신 것이 있으면 언제든 남겨주셔요! 강의 잘 들어주셔서 감사합니다!
- 0
- 1
- 61






