연우, 장을 열다.

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

mysql에서 select를 해올때, 잘 쓰면 보약이 되는 녀석이 있습니다. 바로 별칭(alias)이란 녀석인데, 사용 방법은 간단합니다. 


select 컬럼명 as 별칭

select 함수 as 별칭

select (서브쿼리) as 별칭


위 방식대로 사용하는 것입니다. 


select  last_name as 이름, gender as 성별,  hire_date as '회사 입사일


이라고 별칭을 지으면.. 


이름    | 성별     | 회사 입사일

---------------------------------------

김경호 | 남        |2017-11-19


위와 같이 불러옵니다. 


물론 당연히 as 다음에 영문이 와도 되고, 위처럼 한글이 와도 됩니다. 하지만, 별칭에 공백이 있다면 꼭 반드시 '' 이렇게 표기해주셔야 합니다. 



mysql 주석 -- /**/

web/mysql2017. 11. 18. 21:53

주석 처리하는데 방법은 2가지입니다. 


회색 표시가 된 부분이 주석입니다. 


한줄 주석을 할거면 


--


EX)

select first_name, last_name, gender -- 이름과 성별 열을 가져옴

from employees;


위처럼 하면 -- 그 다음 나오는 줄을 주석처리하는 것입니다. 


여러줄을 주석처리할 것이라면 


/*

 이 쿼리는 

회원정보중에서 이름과 성별을 불러오는 쿼리입니다. 

잘 유념해서 활용하시면 됩니다.

*/

select first_name, last_name, gender from employees;


위처럼 사용하시면 됩니다.