기억하기 위한 기록

[프로그래머스_코테 연습] SQL | SUM, MAX, MIN 본문

코딩테스트 연습

[프로그래머스_코테 연습] SQL | SUM, MAX, MIN

곽구 2022. 1. 27. 15:11

1. 최대값 구하기 (MAX)

| 문제설명


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

 

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

 

[정답]

-- MySQL
SELECT MAX(DATETIME) '시간'
FROM ANIMAL_INS;

-- Oracle
-- 오라클은 AS를 이용해 별칭을 지정할 수 있다.
SELECT MAX(DATETIME) AS 시간
FROM ANIMAL_INS;

 

 


| 예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면, 가장 늦게 들어온 동물은 Annna 이고, Anna는 2013-11-18 17:03:00에 들어왔습니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

 

 


 

| 풀이 

[최댓값 구하기]  : 가장 최근에 들어온 동물

 

1. MAX( ) 를 통해 가장 큰 값을 알 수 있다. (시간에서 가장 큰 값 = 가장 최근)

SELECT MAX(DATETIME) '시간'
FROM ANIMALS_INS;

2. MAX( ) 를 사용하지 않고 조회하는 방법

SELECT DATETIME '시간'
FROM ANIMALS_INS ORDER BY DATETIME DESC LIMIT 1;

- ORDER BY DESC를 통해 내림차순 정렬후, LIMIT 를 통해 1번째 row만 가져오기.

 

 

 

 


 

2. 최소값 구하기 (MIN)

| 문제설명


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

 

 

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

 

[정답]

 

-- MySQL
SELECT MIN(DATETIME) '시간'
FROM ANIMAL_INS;

-- Oracle
SELECT MIN(DATETIME) AS 시간
FROM ANIMAL_INS;

 


 

| 예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면, 가장 늦게 들어온 동물은 Jack이고, Jack는 2013-10-14 15:38:00에 들어왔습니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

 

 


 

| 풀이 

[최솟값 구하기] : 가장 늦게 들어온 동물(가장 먼저)

 

1. MIN( ) 를 통해서 가장 작은 값을 알 수 있다.  

SELECT MIN(DATETIME) '시간'
FROM ANIMALS_INS;

 

2. MIN( ) 를 사용하지 않고 조회하는 방법

SELECT DATETIME '시간'
FROM ANIMALS_INS ORDER BY DATETIME LIMIT 1;

- ORDER BY 함수를 통해 오름차순 정렬 후 , LIMIT 를 통해 1번째 row만 가져오기.

 

 


 

3. 동물 수 구하기 (COUNT)

| 문제설명


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

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

 

[정답]

-- MySQL
SELECT COUNT(ANIMAL_ID)
FROM ANIMAL_INS;

-- Oracle
SELECT COUNT(ANIMAL_ID)
FROM ANIMAL_INS

 

 


 

| 예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면, 가장 늦게 들어온 동물은 Annna 이고, Anna는 2013-11-18 17:03:00에 들어왔습니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

 


 

| 풀이

[동물 수 구하기] : 동물이 몇마리인지 COUNT하기

 

1. COUNT( ) 를 통해서 개수를 구할 수 있다.

SELECT COUNT(ANIMAL_ID)
FROM ANIMAL_INS;


 

4. 중복 제거하기 (DISTINCT)

| 문제설명


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

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

 

[정답]

-- MySQL
SELECT COUNT(DISTINCT NAME) -- 중복제거
FROM ANIMAL_INS
WHERE NAME IS NOT NULL; -- 조건

-- Oracle
SELECT COUNT(DISTINCT NAME) -- 중복제거
FROM ANIMAL_INS
WHERE NAME IS NOT NULL; -- 조건

 


 

| 예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면, 보호소에 들어온 동물의 이름은 NULL, *Sam , *Sam, *Sweetie입니다. 이 중 NULL과 중복되는 이름을 고려하면, 보호소에 들어온 동물 이름의 수는 2 입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

 


 

| 풀이

[중복 제거하기] : 동물이 몇마리인지 COUNT하는데 중복 제거와 , NULL 포함시키지 않기

 

1. COUNT( ) 를 통해서 개수를 구할 수 있으며, DISTINCT를 통해 중복을 제거할 수 있고, WHERE절을 사용해 NULL이 아닌 NAME만 COUT할 수 있다.

 

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


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