[TIL] 프로그래머스 고득점 쿼리문

유현영·2019년 12월 28일
0

Mysql 쿼리문 공부하기
프로젝트를 진행하다가 쿼리문을 해결하지 못하는 내가 너무 무능력해서 너무 화가 났다. 그래서 프로그래머스에 나와있는 SQL문들을 모조리 풀어보았다. 하지만 그렇게 어려운 문제들은 아니여서 더 많은 테이블로 연습해볼 필요가 있다고 생각한다.

문제를 풀면서 내가 부족했던 점이나 새로 알게된 점을 정리 해보려고 한다.

1. GROUP BY 데이터 없을때 0으로 표시하기

입양시각구하기(2) 라는 문제에서 알게 되었던 것이다.
테이블 1개에서 각 0시부터 23시까지 시간대별로 몇건 발생했는지 조회하는 쿼리다. 처음에는 단순히 시간으로 GROUP BY 해서 건수를 COUNT 해서 해결하면 되는 단순한 문제인 줄 알았다. 하지만 그룹하하는 과정에서 데이터가 없다면 아예 그룹화되지 않아서 컬럼이 나오지를 않는다.
즉 내가 원하는 데이터는

datetimecount
10
210
34

인데 1시에는 데이터가 없어서 2시와 3시의 그룹화만 보여준다는 것이다. 이럴때는 GROUP BY를 사용하면 안된다. datetime 을 +1씩 올려주며 그룹별 개수를 세어야한다. SET으로 변수를 설정해주고 SQL 에서 변수설정은 앞에 @를 붙이면서 시작한다.

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

2.

profile
오늘보다 더 나은 내일

0개의 댓글