SQL With 프로그래머스 (SELECT, SUM, MAX, MIN, GROUP BY)

조배·2022년 2월 11일
0

Road to Coding test

목록 보기
13/31
post-thumbnail

프로그래머스 SQL 고득점 Kit

모든 문제의 테이블

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

SELECT

# 기본 틀
SELECT (결과값으로 보여줄 '칼럼' or 전체시 '*') FROM 테이블명 

# 1. 조건
WHERE [칼럼 = '값'] 
# 2. 정렬 기준 칼럼 
ORDER BY [칼럼] ASC(오름차순) OR DESC(내림차순)
# 3. (결과값 개수)
LIMIT  [숫자]

정렬 조건이 두개일때

ORDER BY (칼럼1) ASC,	#기본값이 오름차순이라 안써도됨 
		 (칼럼2) DESC; 

SUM, MAX, MIN

# 1. 최대값 구하기 - MAX
# MAX(칼럼명) AS (사용자 지정 별칭..?) 
SELECT MAX(DATETIME) AS 나이 FROM ANIMAL_INS 
# DATETIME 칼럼의 최대값을 결과값으로 보여준다.

# 2. 최소값 구하기 - MIN
# MIN(칼럼명) AS (사용자 지정 별칭..?) 
SELECT MIN(DATETIME) AS 나이 FROM ANIMAL_INS 
# DATETIME 칼럼의 최소값을 결과값으로 보여준다.

# 3. 동물 수 구하기 - COUNT
# COUNT(칼럼명) AS (사용자 지정 별칭..?) 
SELECT COUNT(ANIMAL_ID) AS 개체수 FROM ANIMAL_INS
# ANIMAL_ID 칼럼의 개수를 결과값으로 보여준다

# 4. 중복 제거하기 - COUNT DISTINCT , IS NOT NULL
# COUNT(DISTINCT 중복 제거할 칼럼명) AS (사용자 지정 별칭..?) 
# WHERE (조건을 부여할 칼럼명) IS NOT NULL(NULL값을 표시 X)
SELECT COUNT(DISTINCT NAME) AS 개체수 FROM ANIMAL_INS
WHERE NAME IS NOT NULL
# ANIMAL_ID 칼럼의 중복값과 NULL값 제거한 개수를 결과값으로 보여준다

GROUP BY

# 1. 고양이와 개는 몇 마리 있을까 - GROUP BY
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count FROM ANIMAL_INS 
GROUP BY ANIMAL_TYPE 	# GROUP BY 그룹화할 (칼럼명)
ORDER BY ANIMAL_TYPE	# 문제 조건이 고양이->강아지 순으로 출력이기 때문에
# ANIMAL_TYPE의 값들을 행으로 나타내주고,
# 해당 행에 대한 표시해주고 싶은 값을 설정한다(해당 문제는 COUNT(ANIMAL_TYPE)).

# 2. 동명 동물 수 찾기 - HAVING 
SELECT NAME, COUNT(NAME) AS count FROM ANIMAL_INS
GROUP BY NAME	# GROUP BY 그룹화할 (칼럼명)
HAVING COUNT(NAME) >1	# HAVING (조건) (WHERE 느낌)
ORDER BY NAME # 문제 조건이 이름 순으로 출력
# NAME의 값들을 행으로 나타내주고,
# 해당 행에 대한 표시해주고 싶은 값을 설정한다(해당 문제는 COUNT(NAME)).

# 3. 입양 시각 구하기(1) - HOUR
# HOUR(칼럼) 2022-02-11 16:31:31 -> 16(시간을 추출해줌)
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)	# GROUP BY 그룹화할 (칼럼명)
HAVING HOUR > 8 AND HOUR <20	# HAVING (조건) (WHERE 느낌)
ORDER BY HOUR(DATETIME)	# 문제 조건이 시간 순으로 출력
# HOUR(DATETIME)의 값들을 행으로 나타내주고,
# 해당 행에 대한 표시해주고 싶은 값을 설정한다(해당 문제는 COUNT(DATETIME)).

로컬 변수 ?

set @변수명 :=; # @안에 변수명을 넣어주고 변수를 사용할때도 @변수명으로 사용
# 값을 지정할때 := 으로 지정하면서 차별점을 둠.
# 4. 입양 시각 구하기(2) - 로컬 변수
SET @HOUR := -1;	# @HOUR 값을 -1로 지정해줘서 처음 시작할때 0으로 시작
SELECT (@HOUR := @HOUR +1) AS HOUR, # 0부터 시작해서 계속 +1
# 조건에 로컬변수와 시간값이 같을때 카운트를 준다.
(SELECT COUNT(HOUR(DATETIME)) FROM ANIMAL_OUTS 
WHERE HOUR(DATETIME) = @HOUR) AS COUNT 
FROM ANIMAL_OUTS 
WHERE @HOUR <23; # 문제 조건이 23시까지 출력이기 때문에 23시까지 0부터 +1해줌

profile
깃허브로 이전했습니다 -> https://chobae.github.io/

0개의 댓글