준호씨의 블로그
Programmers - SQL - SUM, MAX, MIN 문제들 풀어보기 본문
SELECT 문제 풀기 다음으로 SUM, MAX, MIN 문제들을 풀어봅니다.
현재 총 4문제가 있습니다.
최댓값 구하기
https://programmers.co.kr/learn/courses/30/lessons/59415
가장 최근에 들어온 동물을 찾는 문제입니다.
풀이 방법은 여러 가지가 있겠지만 두 가지 방법으로 풀었습니다.
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
가장 먼저 들어온 동물이 언제 들어왔는지를 구하는 문제입니다.
마찬가지로 두 가지 방법으로 풀었습니다.
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
동물 보호소에 몇 마리의 동물이 들어왔는지 구하는 문제입니다.
count함수를 이용하면 됩니다.
SELECT count(*)
FROM animal_ins
중복 제거하기
https://programmers.co.kr/learn/courses/30/lessons/59408
동물 보호소에 들어온 동물의 이름이 몇 개인지 조회합니다. 이름이 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함수를 이용해서 합해주었습니다.
그냥 이런 방법이 가능한 거지 이 문제에서는 그다지 실용적이지는 않습니다.
'개발이야기 > PS - Problem Solving, 알고리즘' 카테고리의 다른 글
Programmers - SQL - IS NULL 문제들 풀어보기 (0) | 2021.03.26 |
---|---|
Programmers - SQL - GROUP BY 문제들 풀어보기 (0) | 2021.03.25 |
Programmers - SQL - SELECT 문제들 풀어보기 (1) | 2021.03.21 |
Codility - Odd Occurrences In Array (0) | 2021.03.20 |
Codility - CyclicRotation (0) | 2021.03.19 |