programmers.co.kr/learn/courses/30/lessons/59041
1. 서론
group by - having의 개념을 배우기 좋은 문제
2. 문제 풀이
ANIMAL_INS: 동물 보호소에 들어온 동물의 정보를 담은 테이블
테이블 구조
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE
(각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부)
Q. 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
문제를 해석하자면 대략 이렇다.
1. 두 번 이상 쓰인 이름, 그 이름이 쓰인 횟수 조회
2. null 제외
3. 이름 순으로 정렬
그런데 여기서 문제가 생긴다. 횟수라는 것은 count 함수를 써야 한다는 뜻이다. 이 말은 즉, group by를 해야 한다.
그런데 우리는 두 번 이상 이름이 쓰였다는 것을 조건절로 알아내야 한다. 하지만 group by를 쓰면 where을 사용할 수 없다.
이때 group by에 짝꿍처럼 따라오는 것이 having절이다. where절 대신 having을 쓰면 문제를 풀 수 있다.
3. 코드 설명
SELECT name, count(name)
FROM animal_ins
GROUP BY name
HAVING count(name) >= 2
ORDER BY name;
함수를 사용했기 때문에 group by를 사용하는데 이 때 having으로 조건이었던 두 번 이상 쓰이는 이름을 걸러낼 수 있는 것이다.
'SQL' 카테고리의 다른 글
[ORACLE] 프로그래머스 입양 시각 구하기(1) (+MySQL) (0) | 2021.03.11 |
---|---|
[ORACLE] 프로그래머스 NULL 처리하기(+MySQL) (0) | 2021.03.11 |
[ORACLE] 프로그래머스 고양이와 개는 몇 마리 있을까 (0) | 2021.03.11 |
[ORACLE] 프로그래머스 중복 제거하기 (0) | 2021.03.11 |
[ORACLE] 프로그래머스 이름이 있는 동물의 아이디 (0) | 2021.03.11 |