[프로그래머스][MySQL]동명 동물 수 찾기(+쿼리 실행 순서)

주연·2022년 1월 17일
0

SQL 문제 풀이

목록 보기
10/28
post-thumbnail

문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

NAMETYPENULLABLE
ANIMAL_IDVARCHAR(N)FALSE
ANIMAL_TYPEVARCHAR(N)FALSE
DATETIMEDATETIMEFALSE
INTAKE_CONDITIONVARCHAR(N)FALSE
NAMEVARCHAR(N)TRUE
SEX_UPON_INTAKEVARCHAR(N)FALSE

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면

ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_UPON_INTAKE
A396810Dog2016-08-22 16:13:00InjuredRavenSpayed Female
A377750Dog2017-10-25 17:17:00NormalLucySpayed Female
A355688Dog2014-01-26 13:48:00NormalShadowNeutered Male
A399421Dog2015-08-25 14:08:00NormalLucySpayed Female
A400680Dog2017-06-17 13:29:00NormalLucySpayed Female
A410668Cat2015-11-19 13:41:00NormalRavenSpayed Female

Raven 이름은 2번 쓰였습니다.
Lucy 이름은 3번 쓰였습니다
Shadow 이름은 1번 쓰였습니다.
따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

NAMECOUNT
Lucy3
Raven2

풀이

SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2 AND NOT NAME IS NULL
ORDER BY NAME

참고) 쿼리 실행 순서 https://sqlbolt.com/lesson/select_queries_order_of_execution

  1. FROM과 JOIN
    JOIN이 먼저 실행되어 데이터가 SET으로 모아지게 됌.
    여기에는 서브쿼리도 함께 포함되어 임시적인 테이블을 만들 수 있게 도와줌.

  2. WHERE
    데이터셋을 형성하게 되면 WHERE의 조건이 개별 행에 적용이 된다. 이 WHERE절의 제약 조건은 FROM절로 가져온 테이블에 적용이 될 수 있다.

  3. GROUP BY
    WHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화된다. 쿼리에 집계 기능이 있는 경우에만 이 기능을 사용해야 한다.

  4. HAVING
    GROUP BY 절이 쿼리에 있을 경우 HAVING 절의 제약조건이 그룹화된 행에 적용됌.

  5. SELECT
    SELECT에 표현된 식이 마지막으로 적용됌.

  6. DISTINCT
    표현된 행에서 중복된 행은 삭제됌

  7. ORDER BY
    지정된 데이터를 기준으로 오름차순, 내림차순을 지정

  8. LIMIT / OFFSET
    LIMIT와 OFFSET에서 벗어나는 행들이 제외되어서 출력됌.

profile
공부 기록

0개의 댓글