본문 바로가기
Study/Database

SQL (DATABASE) 명령어4-Having

by Answer Choi 2016. 7. 28.
반응형


앞서 포스팅한 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

인기글