프로그래머스 SQL 고득점 Kit - SUM, MAX, MIN

6720·2023년 2월 21일
post-thumbnail

👨‍🏫 이번 목표

프로그래머스 SQL 고득점 Kit에서 [SUM, MAX, MIN] 풀기

깃허브 링크

📒 문제 풀이

01 최솟값 구하기


문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_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
A399552Dog2013-10-14 15:38:00NormalJackNeutered Male
A379998Dog2013-10-23 11:42:00NormalDiscipleIntact Male
A370852Dog2013-11-03 15:04:00NormalKatieSpayed Female
A403564Dog2013-11-18 17:03:00NormalAnnaSpayed Female

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

시간
2013-10-14 15:38:00

※ 컬럼 이름(위 예제에서는 "시간")은 일치하지 않아도 됩니다.


코드

select min(datetime) as "시간"
from animal_ins;

02 동물 수 구하기


문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_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
A399552Dog2013-10-14 15:38:00NormalJackNeutered Male
A379998Dog2013-10-23 11:42:00NormalDiscipleIntact Male
A370852Dog2013-11-03 15:04:00NormalKatieSpayed Female
A403564Dog2013-11-18 17:03:00NormalAnnaSpayed Female

동물 보호소에 들어온 동물은 4마리입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

count
4

※ 컬럼 이름(위 예제에서는 count)은 일치하지 않아도 됩니다.


코드

select count(*) as count
from animal_ins;

03 중복 제거하기


문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_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 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

예시

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

ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_UPON_INTAKE
A562649Dog2014-03-20 18:06:00SickNULLSpayed Female
A412626Dog2016-03-13 11:17:00Normal*SamNeutered Male
A563492Dog2014-10-24 14:45:00Normal*SamNeutered Male
A513956Dog2017-06-14 11:54:00Normal*SweetieSpayed Female

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

count
4

※ 컬럼 이름(위 예제에서는 count)은 일치하지 않아도 됩니다.


코드

select count(distinct name)
from animal_ins
where name is not null;

04 최댓값 구하기


문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_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
A399552Dog2013-10-14 15:38:00NormalJackNeutered Male
A379998Dog2013-10-23 11:42:00NormalDiscipleIntact Male
A370852Dog2013-11-03 15:04:00NormalKatieSpayed Female
A403564Dog2013-11-18 17:03:00NormalAnnaSpayed Female

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

시간
2013-11-18 17:03:00

※ 컬럼 이름(위 예제에서는 "시간")은 일치하지 않아도 됩니다.


코드

select max(datetime)
from animal_ins;

05 가격이 제일 비싼 식품의 정보 출력하기


문제 설명

다음은 식품의 정보를 담은 FOOD_PRODUCT 테이블입니다. FOOD_PRODUCT 테이블은 다음과 같으며 PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE는 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 의미합니다.

Column nameTypeNullable
PRODUCT_IDVARCHAR(10)FALSE
PRODUCT_NAMEVARCHAR(50)FALSE
PRODUCT_CDVARCHAR(10)TRUE
CATEGORYVARCHAR(10)TRUE
PRICENUMBERTRUE

문제

FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.

예시

FOOD_PRODUCT 테이블이 다음과 같을 때

PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE
P0018맛있는고추기름CD_OL00008식용유6100
P0019맛있는카놀라유CD_OL00009식용유5100
P0020맛있는산초유CD_OL00010식용유6500
P0021맛있는케첩CD_OL00001소스4500
P0022맛있는마요네즈CD_OL00002소스4700

SQL을 실행하면 다음과 같이 출력되어야 합니다.

PRODUCT_IDPRODUCT_NAMEPRODUCT_CDCATEGORYPRICE
P0020맛있는산초유CD_OL00010식용유6500

코드

select *
from food_product
where price = (select max(price)
               from food_product);

06 가장 비싼 상품 구하기


문제 설명

다음은 어느 의류 쇼핑몰에서 판매 중인 상품들의 정보를 담은 PRODUCT 테이블입니다. PRODUCT 테이블은 아래와 같은 구조로 되어있으며, PRODUCT_IDPRODUCT_CODEPRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다.

Column nameTypeNullable
PRODUCT_IDINTEGERFALSE
PRODUCT_CODEVARCHAR(8)FALSE
PRICEINTEGERFALSE

상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는 카테고리 코드를 의미합니다.

문제

PRODUCT 테이블에서 판매 중인 상품 중 가장 높은 판매가를 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 MAX_PRICE로 지정해주세요.

예시

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

PRODUCT_IDPRODUCT_CODEPRICE
1A100000110000
2A20000059000
3C100000622000

가장 높은 판매가는 22,000 원 이므로, 다음과 같은 결과가 나와야 합니다.

MAX_PRICE
22000

코드

select max(price) as MAX_PRICE
from product;

후기

1) 시간을 정해두고 푸니깐 다 풀어버렸다.. 차라리 다 풀어버리고 공식이랑 문법 정리하는 시간을 가지는게 맞을 것 같다.

profile
뭐라도 하자

0개의 댓글