https://school.programmers.co.kr/learn/courses/30/lessons/59041
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드설명
GROUP BY + HAVING + COUNT 를 활용합니다.
GROUP BY로 이름별로 그룹화시키고, HAVING으로 2개 이상의 이름인 것만 출력합니다.
1. 동물들을 NAME으로 그룹화합니다.
2. 그룹 중 NAME이 NULL이 아니고, 같은 이름을 가진 동물의 수가 2마리 이상인 경우만 필터링합니다.
3. 최종 선택된 이름과 동물의 수를 이름 순으로 오름차순 정렬합니다.
코드
SELECT NAME AS NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT >= 2
AND NAME IS NOT NULL
ORDER BY NAME ASC;
아래의 코드는 COUNT(*) 대신 COUNT(AI.ANIMAL_ID)로도 가능합니다.
COUNT(*)는 그룹 내의 모든 행의 수를 셉니다. 각 NAME에 대해 해당 이름을 가진 모든 동물의 수를 세게 되는데, ANIMAL_ID가 PRIMARY KEY 이고 NULL이 될 수 없으므로 이와 같은 방법도 존재합니다.
SELECT AI.NAME, COUNT(AI.ANIMAL_ID)
FROM ANIMAL_INS AS AI
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(AI.ANIMAL_ID) >= 2
ORDER BY NAME;
ORACLE
SELECT AI.NAME, COUNT(*) AS COUNT
FROM ANIMAL_INS AI
GROUP BY AI.NAME
HAVING COUNT(*) >= 2 AND AI.NAME IS NOT NULL
ORDER BY AI.NAME