뚜당탕탕

[프로그래머스 / MySQL] SELECT 모음 / SUM, MAX, MIN 모음 본문

💯 문제 풀이/프로그래머스

[프로그래머스 / MySQL] SELECT 모음 / SUM, MAX, MIN 모음

뚜띠언니 2021. 10. 24. 23:18

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

 


 

SELECT - ① 모든 레코드 조회하기 

👇 문제 설명

동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

👇 문제 풀이

초록색 배경 부분이 문제에서 요구하는 부분이다. 동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. 

ANIMAL_ID 순으로 정렬하기 위해 ORDER BY 절을 이용한다.

오름차순이므로 ASC 를 이용한다. (내림차순은 DESC)

SELECT * 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;

 

SELECT - ② 역순 정렬하기

👇 문제 설명

더보기

동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

..이하 생략

👇 문제 풀이

SELECT NAME AS "NAME", DATETIME AS "DATETIME"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID DESC;

SELECT 문에서  `AS` 를 이용하여 별칭을 지정할 수 있다. 그러면 출력문에서 컬럼명이 별칭으로 변경되어 출력된다.

ANIMAL_ID 역순으로 정렬이므로 ORDER BY 절을 이용한다. 역순 또는 내림차순 정렬일 경우에는 DESC 이다.

 

SELECT - ③ 아픈 동물 찾기

👇 문제 설명

더보기

 

동물 보호소에 들어온 동물 중 아픈 동물1(INTAKE_CONDITION이 Sick 인 경우를 뜻함)의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

예시

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


이 중 아픈 동물은 Miller와 Cherokee입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

 

👇 문제 풀이

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = "Sick"
ORDER BY ANIMAL_ID ASC;

 

SELECT - ④ 어린 동물 찾기

동물 보호소에 들어온 동물 중 젊은 동물의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION != "Aged"
ORDER BY ANIMAL_ID ASC;

 

SELECT - ⑤ 동물의 아이디와 이름

동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. 

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID ASC;

 

SELECT - ⑥ 여러 기준으로 정렬하기

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

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

다중 정렬은 ORDER BY 절에서 왼쪽을 기준으로 차례대로 정렬되는 것을 생각하면 된다.

이름순으로 정렬하는 NAME ASC 를 가장 왼쪽에 작성하고, 그 다음에 정렬할 보호일자를 최신 기준으로 정렬하도록 작성한다.

 

SELECT - ⑦ 상위 n개 레코드

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME ASC
LIMIT 1;

LIMIT n : 상위 n개의 레코드만 보여주겠다

 

SUM, MAX, MIN - ① 최댓값 구하기

가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT MAX(DATETIME) AS "시간"
FROM ANIMAL_INS

 

SUM, MAX, MIN - 최솟값 구하기

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

SELECT MIN(DATETIME) AS "시간"
FROM ANIMAL_INS

 

SUM, MAX, MIN - 동물 수 구하기

동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT COUNT(ANIMAL_ID) 
FROM ANIMAL_INS

 

SUM, MAX, MIN - 중복 제거하기

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

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

COUNT() : 개수 세는 함수

DISTINCT() : 중복된 값을 제거해주는 함수, NULL 은 제거되지 않는다.

WHERE절 : 조건식

IS NOT NULL : NULL 이 아닌

 

끝~ 오늘은 여기까지~

Comments