준호씨의 블로그

Programmers - SQL - SUM, MAX, MIN 문제들 풀어보기 본문

개발이야기/PS - Problem Solving, 알고리즘

Programmers - SQL - SUM, MAX, MIN 문제들 풀어보기

준호씨 2021. 3. 24. 00:25
반응형

 

 

Programmers - SQL - SELECT 문제들 풀어보기

프로그래머스에서 SQL문제들 중 SELECT 문제들을 풀어 보았습니다. 테이블 하나에서 단순 조회하는 정도라 난이도는 쉬운 편입니다. 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션

junho85.pe.kr

SELECT 문제 풀기 다음으로 SUM, MAX, MIN 문제들을 풀어봅니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

현재 총 4문제가 있습니다.

 

최댓값 구하기

https://programmers.co.kr/learn/courses/30/lessons/59415

 

코딩테스트 연습 - 최댓값 구하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

가장 최근에 들어온 동물을 찾는 문제입니다.

풀이 방법은 여러 가지가 있겠지만 두 가지 방법으로 풀었습니다.

datetime역순으로 정렬하고 첫 번째 데이터 가져오기

SELECT datetime
FROM animal_ins
order by datetime desc
limit 1

max함수 이용하기

SELECT max(datetime)
FROM animal_ins

 

최솟값 구하기

https://programmers.co.kr/learn/courses/30/lessons/59038

 

코딩테스트 연습 - 최솟값 구하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

가장 먼저 들어온 동물이 언제 들어왔는지를 구하는 문제입니다.

마찬가지로 두 가지 방법으로 풀었습니다.

datetime순으로 정렬하고 첫 번째 데이터 가져오기

SELECT datetime
FROM ANIMAL_INS
order by datetime
limit 1

min함수 이용하기

SELECT min(datetime)
FROM animal_ins

 

동물 수 구하기

https://programmers.co.kr/learn/courses/30/lessons/59406

 

코딩테스트 연습 - 동물 수 구하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

동물 보호소에 몇 마리의 동물이 들어왔는지 구하는 문제입니다.

count함수를 이용하면 됩니다.

SELECT count(*)
FROM animal_ins

 

중복 제거하기

https://programmers.co.kr/learn/courses/30/lessons/59408

 

코딩테스트 연습 - 중복 제거하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

동물 보호소에 들어온 동물의 이름이 몇 개인지 조회합니다. 이름이 NULL인 경우는 제외합니다. 중복된 이름은 하나로 처리합니다.

distinct문으로 중복을 제거하고 count함수를 이용하면 쉽게 구할 수 있습니다.

SELECT count(distinct name)
FROM animal_ins

count 함수는 NULL을 집계하지 않기 때문에 NULL을 제거하는 조건을 따로 넣지는 않았습니다.

만약 명시적으로 넣고 싶다면 다음과 같이 NULL을 제거합니다.

SELECT count(distinct name)
FROM animal_ins
WHERE name is not NULL

 

SUM, MAX, MIN이 주제였는데 SUM을 사용해서 푼 문제가 없어서 마지막 문제를 SUM을 이용해서 풀어보았습니다.

select sum(1)
from (
         SELECT 1
         FROM animal_ins
         where name is not null
         group by name) animal;

name is not null로 null을 제거하고 group by name으로 같은 이름별로 그룹핑합니다. 그 결과를 다시 select 해서 열의 개수만큼 1을 만들어서 sum함수를 이용해서 합해주었습니다.

그냥 이런 방법이 가능한 거지 이 문제에서는 그다지 실용적이지는 않습니다.

반응형
Comments