inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

초보자를 위한 BigQuery(SQL) 입문

총 정리 문제 풀이 1~3번

총 정리 문제 풀이 2번 문제 추가 질문

해결된 질문

189

성장캐

작성한 질문수 1

0

카일님 안녕하세요. 강의 아주 잘 듣고 있습니다 감사합니다 :)

총 정리 문제 2번에서 추가 질문 드립니다.
제가 처음 풀때 문제를 잘못이해하여, type1 별 가장 많이 포획된 포켓몬 이름과 횟수를 각 type1 TOP 1 들을 구하려고 했습니다. MAX (COUNT) 라는 말도 안되는 쿼리를 작성하면서 고군분투 하였고, 결국 못 풀었습니다.
다행히 채점할때 카일님이 의도하신 출제방향으로는 답이 나와있는 상태여서 이해는 하였습니다 만. !

커머스라고 가정할 때 각 카테고리별(type1) , 가장 많이 팔린 제품(kor_name), 최다 판매수(cnt) 를 구해야 한다면, 제가 풀지못했던 문제로 해결할 수 있을 것 같아서요.

type1 별로 포획량 TOP 1을 구하는 쿼리는 어떻게 작성하면 좋을 까요?

sql bigquery 데이터-리터러시

답변 2

1

카일스쿨

안녕하세요. 문제 열심히 풀고 계시는군요..! 잘하고 계시네요

말씀하신 결과를 얻고 싶다면, 윈도우 함수를 쓰는 것이 제일 빠릅니다. 윈도우 함수는 기본편에선 다루진 않고 BigQuery 활용편 에서 다룹니다. 윈도우 함수가 처음에 좀 어려운 부분이 있어서 활용편으로 빼두었어요.

 

말씀하신 MAX를 사용하는 방식으로 풀 수는 있긴 합니다. 다만 여러번 돌아가는 느낌이 들긴 하죠

WITH type_pokemon_counts AS (
    SELECT
        p.type1,
        p.kor_name,
        COUNT(tp.id) as cnt
    FROM basic.trainer_pokemon AS tp
    INNER JOIN basic.pokemon AS p 
    ON tp.pokemon_id = p.id
    GROUP BY p.type1, p.kor_name
), type_max_counts AS (
    SELECT 
        type1,
        MAX(cnt) AS max_cnt
    FROM type_pokemon_counts
    GROUP BY type1
)
SELECT 
    tpc.type1,
    tpc.kor_name,
    tpc.cnt
FROM type_pokemon_counts AS tpc
JOIN type_max_counts AS tmc 
ON tpc.type1 = tmc.type1 
AND tpc.cnt = tmc.max_cnt
ORDER BY tpc.cnt DESC

 

 

윈도우 함수를 사용한다면 아래 쿼리로 사용할 수 있습니다(문법은 모르실거라 그냥 이런 것이 있구나 정도로 생각하시고 활용편을 듣는 것을 추천드려요) : 더 직관적이고 쿼리가 짧아집니다

WITH ranked_pokemons AS (
  SELECT
    p.type1,
    p.kor_name,
    COUNT(tp.id) AS cnt,
    ROW_NUMBER() OVER (PARTITION BY p.type1 ORDER BY COUNT(tp.id) DESC) AS rn
  FROM basic.trainer_pokemon AS tp
  JOIN basic.pokemon AS p ON tp.pokemon_id = p.id
  GROUP BY p.type1, p.kor_name
)
SELECT
  type1,
  kor_name,
  cnt
FROM ranked_pokemons
WHERE rn = 1
ORDER BY cnt DESC;

0

성장캐

감사합니다 카일님! 활용편 강의 듣고 알려주신 쿼리 다시 한번 살펴봐야겠네요. 감사합니다!

vs code

0

51

2

수업자료 다운

0

49

2

쿼리 화면 문의

0

72

2

4-5. 3번 문제 질

0

66

2

JOIN 1번 문제

1

76

2

battle 테이블 생성 시 생성 오류

0

69

1

5-6. 4번 문제 WHERE 조건의 위치 문의

0

65

2

5-6. 연습문제 4번, type2에 대해서는 고려하지 않아도 될까요?

1

71

2

battle table 오류

0

69

2

location IS NOT NULL 을 굳이 안 써도 되지 않나요?

0

62

2

12강 집계 함수

0

49

1

2-6. 연습 문제 1~3번

0

50

1

안녕하세요! 11번 문제 query문에 관해 질문드립니다

0

51

1

2-6 #2 WHERE vs. HAVING절 사용 여부 차이

0

67

1

섹션 별 퀴즈

0

67

1

espanso 설치 완료 후 프로그램 실행 문제

0

104

2

Syntax에러

0

83

2

4-5. 1번 문제 TIMESTAMP 관련 질문

0

89

2

시각화 도구 사용

0

110

2

11번 문제 GROUP BY 사용하는 이유

0

99

1

big query 쿼리 결과 컬럼 폭

0

108

3

battle 스키마 조건 복사 파일이 열리지 않아요.

0

130

1

6-5 데이터 검증 결과 예시문제

0

79

2

battle 스키마 조건 복사붙여넣기용 자료

0

115

2