Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

끄적끄적

프로그래머스 sql - GROUP BY 본문

코테준비

프로그래머스 sql - GROUP BY

alstj_성공 2021. 10. 9. 23:38

 

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

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/59040

 

코딩테스트 연습 - 고양이와 개는 몇 마리 있을까

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

programmers.co.kr

 

고양이와 개의 마리수를 세는 것을 COUNT를 이용하면 되고, 

고양이가 개보다 먼저 출력되어야 하므로 이건 ORDER BY를 이용하면 된다.

SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

 

2. 동명 동물 수 찾기

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/59041

 

코딩테스트 연습 - 동명 동물 수 찾기

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

programmers.co.kr

 

동물들 중 2번 이상 이름이 적힌 동물을 이름별로 출력하는 문제이다.

이름이 NULL이 아닌 동물들을 조회하므로 WHERE NAME IS NOT NULL을 적어줘야 하며,

이름별로 그룹핑 되므로 GROUP BY를 써줘야 하며, GROUP BY 된 뒤에 '2번 이상'이라는 조건을 걸어줘야 한다.

GROUP BY 뒤에는 WHERE이 아니라 HAVING 절을 써줘야 한다.

마지막으로 이름순으로 조회해야하므로 ORDER BY를 써줘야 한다.

SELECT NAME, COUNT(NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME)>=2
ORDER BY NAME

 

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

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/59412

 

코딩테스트 연습 - 입양 시각 구하기(1)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

 

9~19:59 사이에 입양된 동물들을 시간별로 구하는 문제이다.

TYPE이 DATETIME인 데이터에서 시간만 추출하려면 HOUR(DATETIME)을 사용하면 된다.

또한 시간별로 그룹핑해야하므로 GROUP BY HOUR을 사용해야 하며, 조건은 HAVING 절을 사용한다.

마지막으로 시간순정렬이므로 ORDER BY HOUR을 써준다.

SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR>=9 AND HOUR<20
ORDER BY HOUR

 

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

 

출처 : https://programmers.co.kr/learn/courses/30/lessons/59413

 

코딩테스트 연습 - 입양 시각 구하기(2)

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물

programmers.co.kr

 

3번같이 풀면 입력 시간대밖에 나오지 않는다.

따라서 모든 시간을 출력해야 하기 때문에 로컬 변수를 사용해야 한다.

:= 표시는 =연산과 헷갈리지 않기 위해 사용하는 연산자로, 대입 연산자이다.

SET @hour :=-1;
SELECT (@hour := @hour +1) AS HOUR, 
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME)=@hour) AS COUNT
FROM ANIMAL_OUTS
WHERE @hour<23
GROUP BY HOUR
ORDER BY HOUR