반응형
앞서 포스팅한 SQL (DATABASE) 명령어3-Group by 에서 데이터를 쿼리할 때 일정 조건에 따라
그룹을 만들어 쿼리하는 것을 보았습니다.
having은 이 그룹에 또다른 조건을 걸어 쿼리할 때 사용합니다.
where과 비슷한데, where은 컬럼에 대해 조건을 걸지만, having은 그룹에 조건을 겁니다.
1 | select count(Consumption),Time from All_Consumption_201510 group by Hour(Time); | cs |
Consumption이 기록된 갯수를 시간단위로 가져왔습니다.
015
여기에 조건을 걸어보겠습니다.
갯수가 30개 이상인 경우만 가져오는 조건입니다.
1 | select count(Consumption),Time from All_Consumption_201510 group by Hour(Time) having count(Consumption) >30; | cs |
보시는 바와 같이 위 쿼리 데이터에서 갯수가 30개 이상인 경우만 쿼리해 왔습니다.
근데 만약 Consumption 값이 30이상인 경우의 갯수를 쿼리해 오려면 어떻게 해야 할까요?
1 | select count(Consumption),Time from All_Consumption_201510 group by Hour(Time) having Consumption >30; | cs |
이렇게 하면 될 것 같습니다.
하지만오류 메세지가 나타나게 됩니다.
having은 그룹에 필터를 적용하는 거라 불가능하고 where을 사용하여 적용해야 합니다.
참고로 having 대신 그자리에 where을 넣으면 어떻게 될까요?
1 | select count(Consumption),Time from All_Consumption_201510 group by Hour(Time) where Consumption >30; | cs |
이렇게 group by 뒤쪽을 넣게 되면 에러가 나타납니다.
where은 group by 앞쪽에 들어가야 합니다.^^
1 | select count(Consumption),Time from All_Consumption_201510 where Consumption >30 group by Hour(Time); | cs |
SQL문의 처리순서는
SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY
입니다.
반응형
'Study > Database' 카테고리의 다른 글
db 외부접속 안될때 (0) | 2016.08.29 |
---|---|
mysql 한글 깨질때 (0) | 2016.08.10 |
SQL (DATABASE) 명령어3-group by (0) | 2016.07.27 |
SQL (DATABASE) 명령어2-수식및 연산자 (0) | 2016.07.26 |
SQLite 사용하기!! (0) | 2015.10.15 |