Coding Test Practice/SQL

[프로그래머스 코딩테스트 연습 SQL 고득점 Kit] SUM, MAX, MIN, GROUP BY

y2r1m 2022. 9. 14. 00:51

SUM, MAX, MIN

문제 링크 : https://school.programmers.co.kr/learn/courses/30/parts/17043

 

프로그래머스

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

programmers.co.kr

 

1. 최댓값 구하기

# 가장 최근에 들어온 동물은 언제 들어왔는지 조회
SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME DESC LIMIT 1

 

2. 최솟값 구하기

# 가장 먼저 들어온 동물은 언제 들어왔는지 조회
SELECT DATETIME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1

 

3. 동물 수 구하기

# 동물 보호소에 동물이 몇 마리 들어왔는지 조회
SELECT COUNT(ANIMAL_ID) FROM ANIMAL_INS

 

4. 중복 제거하기

# 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회 (이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 침)
SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS

 


GROUP BY

문제 링크 : https://school.programmers.co.kr/learn/courses/30/parts/17044

 

프로그래머스

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

programmers.co.kr

 

1. 고양이와 개는 몇 마리 있을까

# 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회 (이때 고양이를 개보다 먼저 조회)
SELECT ANIMAL_TYPE, COUNT(DISTINCT ANIMAL_ID) AS count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE
=> ANIMAL_ID 앞에 DISTINCT를 안써주고 헤맸다,,

 

2. 동명 동물 수 찾기

# 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회 (이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회)
SELECT NAME, COUNT(NAME) FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) >= 2 ORDER BY NAME

3. 입양 시각 구하기(1)

# 보호소에서 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회 (이때 결과는 시간대 순으로 정렬)
SELECT HOUR(DATETIME) AS HOUR, COUNT(ANIMAL_ID) AS COUNT 
FROM ANIMAL_OUTS 
GROUP BY HOUR
HAVING HOUR BETWEEN 9 AND 20 
ORDER BY HOUR

=> 시간 범위를 9에서 20 사이로 지정해주는 것이 중요했다.

 

4. 입양 시각 구하기(2)

# 보호소에서 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회 (이때 결과는 시간대 순으로 정렬)
SET @h := -1; # 사용자 정의 변수

SELECT (@h := @h + 1) AS HOUR, 
(SELECT COUNT(*) FROM ANIMAL_OUTS 
 WHERE HOUR(DATETIME) = @h) AS COUNT 
FROM ANIMAL_OUTS
WHERE @h < 23

=> 너무 어려워서 다른 답안을 참고했다.. 덕분에 사용자 정의 변수에 대해 알게 되었다!