2-5 집계 23:42 GROUP BY 연습문제 질문 드려요
포켓몬의 수를 타입 별 집계, 수가 10 이상인 타입만 남기는 쿼리 작성 연습문제에 대하여 질문 드려요.
작성 전에 고민했던 부분은
포켓몬 타입은 type 1, 2로 나뉘어 있다.
type 2는 null 인 경우가 있다. => where 로 제외할 수 있을까?
type 1, 2 을 포함해서 세야 할 것 같다. (총 포켓몬 수보다 합산 값이 클 수 있다)
였거든요.
Group by 에서 type2를 빼면 통합되지 않았다는 오류가 발생해서 어쩔 수 없이 넣긴 했는데, 제가 원한 형태로 구현되지는 않았습니다. 어떻게 해야 null 을 제외한 type2 의 값까지 전부 셀 수 있을까요?
WHERE TYPE2 IS NOT NULL 을 넣게 되면 1개 타입만 가진 개체의 경우 아예 집계를 하지 않는 것 같아서 그 부분도 뺄 수 밖에 없었어요.
최종적으로는 1열에 타입, 2열에 해당하는 개체 수가 나오게 구현하고 싶습니다.
(바위, 불인 포켓몬의 경우 바위에 1개, 불에 1개 계산되도록이요.
바위, 불 포켓몬 + 바위 포켓몬 + 불 포켓몬 = 바위 2개체 불 2개체)
SELECT
type1,
type2,
COUNT(id) as cnt
FROM `basic.pokemon`
GROUP BY
type1, type2
답변 1
1
안녕하세요.
name type1 type2
리자드 불꽃
리자몽 불꽃 비행만약 이렇게 데이터가 저장되어 있다고 가정할 때,
데이터를 아래와 같이 수정해야 성배님이 원하시는 방식으로 COUNT가 가능합니다
name type_new
리자드 불꽃
리자몽 불꽃
리자몽 비행
이렇게 하려면 UNION ALL을 사용해서 할 수 있습니다
WITH base AS (
SELECT
name,
type1 AS type_new
FROM basic.pokemon
UNION ALL
SELECT
name,
type2 AS type_new
FROM basic.pokemon
)
SELECT
*
FROM base이렇게 하시면 원하는 값을 구할 수 있을거에요.
이후 battle 관련 문제에서 비슷하게 문제를 푼답니다
vs code
0
48
2
수업자료 다운
0
46
2
쿼리 화면 문의
0
70
2
4-5. 3번 문제 질
0
64
2
JOIN 1번 문제
1
73
2
battle 테이블 생성 시 생성 오류
0
68
1
5-6. 4번 문제 WHERE 조건의 위치 문의
0
64
2
5-6. 연습문제 4번, type2에 대해서는 고려하지 않아도 될까요?
1
68
2
battle table 오류
0
68
2
location IS NOT NULL 을 굳이 안 써도 되지 않나요?
0
61
2
12강 집계 함수
0
48
1
2-6. 연습 문제 1~3번
0
49
1
안녕하세요! 11번 문제 query문에 관해 질문드립니다
0
49
1
2-6 #2 WHERE vs. HAVING절 사용 여부 차이
0
65
1
섹션 별 퀴즈
0
64
1
espanso 설치 완료 후 프로그램 실행 문제
0
102
2
Syntax에러
0
81
2
4-5. 1번 문제 TIMESTAMP 관련 질문
0
87
2
시각화 도구 사용
0
109
2
11번 문제 GROUP BY 사용하는 이유
0
98
1
big query 쿼리 결과 컬럼 폭
0
107
3
battle 스키마 조건 복사 파일이 열리지 않아요.
0
128
1
6-5 데이터 검증 결과 예시문제
0
78
2
battle 스키마 조건 복사붙여넣기용 자료
0
113
2





