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 관련 문제에서 비슷하게 문제를 푼답니다
1번 문제 질문
0
8
1
3번 문제 질문!
0
41
2
1-2 battle 테이블 설정 질문 있습니다.
0
34
1
12강 집계 함수 8번 연습문제 질문
0
40
1
6-5 질문 있습니다!
0
56
3
vs code
0
93
2
수업자료 다운
0
110
2
쿼리 화면 문의
0
114
2
4-5. 3번 문제 질
0
107
2
JOIN 1번 문제
1
114
2
battle 테이블 생성 시 생성 오류
0
106
1
5-6. 4번 문제 WHERE 조건의 위치 문의
0
86
2
5-6. 연습문제 4번, type2에 대해서는 고려하지 않아도 될까요?
1
98
2
battle table 오류
0
116
2
location IS NOT NULL 을 굳이 안 써도 되지 않나요?
0
88
2
12강 집계 함수
0
74
1
2-6. 연습 문제 1~3번
0
76
1
안녕하세요! 11번 문제 query문에 관해 질문드립니다
0
78
1
2-6 #2 WHERE vs. HAVING절 사용 여부 차이
0
92
1
섹션 별 퀴즈
0
91
1
espanso 설치 완료 후 프로그램 실행 문제
0
154
2
Syntax에러
0
124
2
4-5. 1번 문제 TIMESTAMP 관련 질문
0
122
2
시각화 도구 사용
0
141
2





