알고리즘/프로그래머스

[프로그래머스 Lv 1, Lv2] SUM, MAX, MIN(SQL)

이채림 2024. 11. 21. 22:41
Lv1. 가장 비싼 상품 구하기

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

SELECT MAX(PRICE) AS MAX_PRICE
FROM PRODUCT;

Lv1. 최댓값 구하기

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

SELECT MAX(DATETIME) AS 시간
FROM ANIMAL_INS;

🚨🔍Lv1. 잡은 물고기 중 가장 큰 물고기의 길이 구하기

FISH_INFO 테이블에서 잡은 물고기 중 가장 큰 물고기의 길이를 'cm' 를 붙여 출력하는 SQL 문을 작성해주세요. 이 때 컬럼명은 'MAX_LENGTH' 로 지정해주세요.

[ 틀린 코드 ]

SELECT MAX(LENGTH) AS MAX_LENGTH
FROM FISH_INFO

 

[ 원인 ]

cm를 붙여야한다.

 

[ 해결법 ]

CONCAT 함수는 SQL에서 문자열을 연결하는 데 사용된다.

 

- Oracle

두 개의 문자열만 CONCAT으로 연결 가능

세 개이상의 문자열을 연결하려면 || 연산자 사용

 

- MySQL

두 개 이상의 문자열도 CONCAT으로 연결 가능

 

[ 정답 코드 ]

SELECT CONCAT(MAX(LENGTH), 'cm') AS MAX_LENGTH
FROM FISH_INFO


🔍Lv2. 가격이 제일 비싼 식품 정보 보기

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

SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (
    SELECT MAX(PRICE)
    FROM FOOD_PRODUCT
);

 

[ 대안 ] - MySQL

SELECT *
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
LIMIT 1;

 

서브쿼리가 먼저 실행되고, 그 결과를 메인 쿼리와 비교하는 방식이므로,

데이터 양이 많아지면 성능이 떨어질 수 있다.

 

ORDER BY LIMIT을 사용하여 최대 값을 찾는 방식이 더 효율적일 수 있다.


Lv2. 최솟값 구하기

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

SELECT MIN(DATETIME)
FROM ANIMAL_INS;

Lv2. 동물 수 구하기

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

SELECT COUNT(*) AS COUNT
FROM ANIMAL_INS;

Lv2. 중복 제거하기

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

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

Lv2. 조건이 맞는 아이템들의 가격 총합 구하기

ITEM_INFO 테이블에서 희귀도가 'LEGEND'인 아이템들의 가격의 총합을 구하는 SQL문을 작성해 주세요. 이때 컬럼명은 'TOTAL_PRICE'로 지정해 주세요.

SELECT SUM(PRICE) AS TOTAL_PRICE
FROM ITEM_INFO
WHERE RARITY = 'LEGEND';

🚨🔍Lv2. 연도별 대장균 크기의 편차 구하기

분화된 연도(YEAR), 분화된 연도별 대장균 크기의 편차(YEAR_DEV), 대장균 개체의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 분화된 연도별 대장균 크기의 편차는 분화된 연도별 가장 큰 대장균의 크기 - 각 대장균의 크기로 구하며 결과는 연도에 대해 오름차순으로 정렬하고 같은 연도에 대해서는 대장균 크기의 편차에 대해 오름차순으로 정렬해주세요.

 

(조금 복잡해서 다음 포스팅에 정리)