Land of Joe

[mySQL] 여러 기준으로 정렬하기, 상위 n개 레코드, 중복 제거하기, 동명 동물 수 찾기 본문

🧠 DataBase

[mySQL] 여러 기준으로 정렬하기, 상위 n개 레코드, 중복 제거하기, 동명 동물 수 찾기

Arendt 2024. 10. 11. 08:29

문제1: 여러 기준으로 정렬하기

  • Table : ANIMAL_INS
  • Column
    ANIMAL_ID : 동물의 아이디
    ANIMAL_TYPE : 생물 종
    DATETIME : 보호 시작일
    INTAKE_CONDITION : 보호 시작 시 상태
    NAME : 이름
    SEX_UPON_INTAKE : 성별 및 중성화 여부
  • 동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

문제 분석

동물 보호소에 들어온

모든 동물의 아이디와 이름, 보호 시작일을 => SELECT

이름 순으로 조회하는 SQL문을 작성해주세요. => ORDER BY ASC

단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다. => ORDER BY DESC


풀이

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME ASC, DATETIME DESC


문제 2: 중복 제거하기

  • 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

문제 분석

동물 보호소에 들어온 동물의 이름은 몇 개인지 => SELECT COUNT()
조회하는 SQL 문을 작성해주세요.
이때 이름이 NULL인 경우는 집계하지 않으며 => IS NOT NULL
중복되는 이름은 하나로 칩니다. => DISTINCT


풀이

SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL

 


문제 3: 동명 동물 수 찾기

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

문제 분석

동물 보호소에 들어온

동물 이름 중 두 번 이상 쓰인 이름과 => GROUP BY, HAVING

해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. => COUNT()

이때 결과는 이름이 없는 동물은 집계에서 제외하며, => WHERE () IS NOT NULL

결과는 이름 순으로 조회해주세요. => ORDER BY

 

풀이

SELECT NAME, COUNT(*) AS "COUNT"
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME ASC