알고리즘/프로그래머스

프로그래머스 SQL 고득점 Kit 코드 총정리 (MySQL) : GROUP BY

개발하는 크롱 2021. 3. 19. 01:26
반응형

GROUP BY

group by는 값은 값을 가진 데이터끼리 묶어주는 역할을 한다. 뒤에 having과 함께 사용할 수 있고, having은 반드시 group by 뒤에만 나올 수 있다. having 뒤에는 조건을 적는다.

고양이와 개는 몇 마리 있을까 (Level 2)

SELECT ANIMAL_TYPE, COUNT(*) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE ASC

동명 동물 수 찾기 (Level 2)

SELECT NAME, COUNT(NAME)
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME)>1
ORDER BY NAME ASC

입양 시각 구하기(1) (Level 2)

SELECT DATE_FORMAT(DATETIME, '%H') AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY DATE_FORMAT(DATETIME, '%H')
HAVING HOUR >= 9 AND HOUR <= 19
ORDER BY HOUR ASC

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

with recursive time as
(select 0 as hour union all select hour+1 from time where hour<23)
select hour, count(animal_id) count
from time
left outer join animal_outs on (hour = date_format(datetime, '%H') )
group by hour

DATE_FORMAT에 익숙하지 않은 분은 한번 찾아보길 바란다.

나머지 SQL문제는 다 쉽게 풀었는데 마지막 문제는 어려웠다.

마지막 문제는 with 절을 사용하는데 with는 임시의 view(가상 테이블; 물리적으로 존재하지 않고 계산된 테이블)를 만드는데 사용된다.

이 문제 풀면서 with recursive 사용해서 테이블 만드는 걸 처음 봤다. 따로 나도 설명은 잘 못하겠고 내가 참고한 블로그 링크를 첨부하겠다.

https://hyunmin1906.tistory.com/149

 

[MySQL] WITH 재귀(RECURSIVE) 쿼리 계층구조

WITH RECURSIVE 문 주의 !! mysql 5.7 이하 미지원 ※ 사용법 1) 메모리 상에 가상의 테이블을 저장 2) 재귀 쿼리를 이용하여 실제로 테이블을 생성하거나 데이터삽입(INSERT)을 하지 않아도 가상 테이블을

hyunmin1906.tistory.com

 

반응형