해결된 질문
작성
·
30
·
수정됨
0
포켓몬의 수를 타입 별 집계, 수가 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 관련 문제에서 비슷하게 문제를 푼답니다