[프로그래머스] MYSQL LEVEL2 2문제 (01~02)

Hyeon·2024년 9월 9일

SQL 문제 풀이

목록 보기
7/61

🚩오늘의 문제는?

SQL - level 2

1.최솟값 구하기
2.동명 동물 수 찾기

1.최솟값 구하기

문제 설명

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

동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

문제 풀이

SELECT DATETIME AS 시간
FROM ANIMAL_INS 
ORDER BY DATETIME ASC LIMIT 1;

주의할 점

  • 가장 먼저 나온 시간을 구하는 것이기 때문에 상위1개로 구분

2.동명 동물 수 찾기

문제 설명

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

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

문제 풀이

정답1

SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS 
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME ASC;

정답2

SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS 
GROUP BY NAME
HAVING COUNT(NAME) > 1
ORDER BY NAME ASC;

주의할 점

  • 참고로 GROUPBY에서도 NULL값이 자동으로 삭제 되기 때문에, 따로
    WHERE 구문을 적지 않아도된다.

  • GROUP BY HAVING

GROUP BY 절

: 특정 컬럼을 기준으로 그룹화 하여 테이블에 존재하는 행들을 그룹별로 구분
: 여러개의 레코드를 하나의 그룹으로 묶어서 계산을 수행

HAVING 절

: 그룹화된 데이터에 조건을 주어 데이터를 추출
: HAVING 절은 GROUP BY와 같이 사용하고, 조건을 지정하는데 사용

예시1 : 국적,나이별 총 소득이 30이상인 행 추출

SELECT NATIONALITY, GENDER , SUM(INCOME) AS TOTAL_INCOME
FROM TABLE1
GROUP BY NATIONALITY, GENDER
HAVING  TOTAL_INCOME >=30;

DISTINCT 절

: 중복된 값을 제거하고 유일한 값을 반환
: SELECT문에서 사용한다.
: 정렬하지 않아서 더 빠르다.

0개의 댓글