mysql group by 그에 대한 조건문을 쓸땐 where 이 아닌 having
group by
group by는 말그대로 그룹별로 묶어주는 역할을 합니다. 당신이 조회하는 테이블이 만약 고객 아이디가 있고, 고객이 주문해간 주문내역이라면,
아이디로 그룹을 묶어서 얼마나 구매해 갔는지 궁금할 수 있습니다.
그럴때에는
select userId, SUM(amount) from buytbl group by useId order by userId;
라고 검색하면 됩니다.
select userId, amount from buytbl order by userId;
위 쿼리는 아이디별로 얼마나 구매했는지 알아볼 수 있는 것이 아니라
중복된 아이디가 있어도 전체의 데이타를 가져오는 결과입니다.
구하고자 했던 것은 각 아이디별 총 구매량이었으니까 당연히
select userId, SUM(amount) from buytbl group by useId order by userId;
라고 쿼리 조회를 해야합니다.
group by의 조건문을 쓸때에는 where이 아니라 having
만약 아이디별로 구매한 내역 중에서 5000이 넘는 amount를 구매한 사람이 알고 싶다면 우리는 이렇게 생각합니다.
select userId, SUM(amount) from buytbl where sum(amount) > 5000 group by useId order by userId;
하지만 이것의 조회는 오류가 발생합니다.
"Error code : 11111. invalid use of group function"
자 위 오류를 시정하기 위해서는
select userId, SUM(amount) from buytbl having sum(amount) > 5000 group by useId order by userId;
위 처럼 where 대신 having을 작성해야 합니다.
자, group by의 조건을 걸때에는 having을 작성해주셔야 합니다.
'web > mysql' 카테고리의 다른 글
insert table a select table b 대량 인썰트할때 (0) | 2017.11.29 |
---|---|
mysql 데이터 insert (0) | 2017.11.19 |
mysql 별칭 잘 쓰면 참 좋은 alias (0) | 2017.11.19 |
mysql 주석 -- /**/ (0) | 2017.11.18 |
mysql 서브쿼리(sub query) -any all some (0) | 2017.11.17 |