Mysql 쿼리문 공부하기
프로젝트를 진행하다가 쿼리문을 해결하지 못하는 내가 너무 무능력해서 너무 화가 났다. 그래서 프로그래머스에 나와있는 SQL문들을 모조리 풀어보았다. 하지만 그렇게 어려운 문제들은 아니여서 더 많은 테이블로 연습해볼 필요가 있다고 생각한다.
문제를 풀면서 내가 부족했던 점이나 새로 알게된 점을 정리 해보려고 한다.
입양시각구하기(2) 라는 문제에서 알게 되었던 것이다.
테이블 1개에서 각 0시부터 23시까지 시간대별로 몇건 발생했는지 조회하는 쿼리다. 처음에는 단순히 시간으로 GROUP BY 해서 건수를 COUNT 해서 해결하면 되는 단순한 문제인 줄 알았다. 하지만 그룹하하는 과정에서 데이터가 없다면 아예 그룹화되지 않아서 컬럼이 나오지를 않는다.
즉 내가 원하는 데이터는
datetime | count |
---|---|
1 | 0 |
2 | 10 |
3 | 4 |
인데 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