[MySQL] 프로그래머스 SQL 동명 동물 수 찾기
1. 문제이해
https://programmers.co.kr/learn/courses/30/lessons/59041
코딩테스트 연습 - 동명 동물 수 찾기
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
위와 같은 정보를 가진 ANIMAL_INS 테이블에서
동물 보호소에 들어온 동물 이름 중 두번 이상 쓰인 이름과
해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성하는 것이 목표이다.
2. 문제풀이
이번에도 역시 GROUP BY 절을 이용해 분류해야 하는 방식의 문제이다.
단, 그룹별 (해당 문제에서 그룹 = 이름)로 분류 시,
두번 이상 쓰인 이름만을 조회해야 한다는 추가적인 조건이 붙으므로,
GROUP BY 절 내부에 추가적인 조건을 쓸 때 사용하는 HAVING 절을 함께 사용해주기로 했다.
HAVING 절은 GROUP BY 절에 의해 분류된 그룹에 대한 조건을 지정, 추가할때 사용되는 구문이다.
테이블에서 같은 이름을 가진 동물의 이름과 해당 이름이 쓰인 횟수를 출력해야하기 때문에,
GROUP BY를 통해 이름(NAME) 별로 구분하고,
HAVING을 통해 이름이 쓰인 횟수(COUNT(NAME)) 가 1보다 클 때만 세어주도록 했다.
3. 정답
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME HAVING COUNT >1
ORDER BY NAME
SELECT : 이름(NAME)과 해당 이름이 쓰인 횟수(COUNT(NAME)) 를 출력
단, COUNT(NAME)은 별칭(AS) 를 사용해 'COUNT' 라고 따로 명명해줌.
FROM : ANIMAL_INS에서
GROUP BY : 이름(NAME) 별로 묶어줌.
HAVING : 이름이 쓰인 횟수(COUNT) 가 1보다 큰 경우(2번 이상)만 세워줌.
ORDER BY : 이름(NAME) 순으로 정렬.
보호소에 들어온 동물들의 이름들 중 2번 이상 쓰인 이름과, 해당 이름이 쓰인 횟수를 조회하는 SQL구문이다.
SELECT, GROUP BY, HAVING 절을 통해,
GROUP BY 절에 명시된 NAME을 기준으로 그룹을 묶었을 때,
HAVING 절의 조건인 COUNT(NAME) > 1인 경우를 만족하는 NAME, COUNT(NAME)을 조회하도록 했다.
오랜만에 풀어보는 SQL문이다..
한달전에 SQL 글이 너무 많은 것 같아서 조금씩 미루다보니 어느덧 시간이 이렇게나 지나버렸다..😂
백준이던 프로그래머스던 SQL이던 비슷한 비율로 조화롭게 올리기도
참 어려운 것 같다..😌