[Database] group by having, AVG MIN MAX
group by having
group by는 말 그대로 그룹을 짓는 것인데 일반 select 문에서 잘 안쓰이고 주로 통계를 낼 때 쓰인다. 높으신 분들이나 임원들은 실무 데이터보다 통계 데이터를 주로 보고 보고서에 쓰기 때문에 주의깊게 사용해야 한다.
group by는 group by로 묶은 컬럼만 조회할 수 있다. 예를 들어 만약 ‘select * from procure_procure_request group by unit;’ 치면 에러가 난다. groub by unit으로 묶은 데이터를 보려면 다음과 같이 unit 컬럼만 조회해야 한다.
select unit from procure_procure_request group by unit;
그리고 다음과 같이 group으로 묶은 값 중 가장 큰 값의 no를 보려면 다음과 같이 MAX(procure_request_no)를 추가한다.
select unit, MAX(procure_request_no)
from procure_procure_request
group by unit;
만약 group by를 사용하고 조건을 걸고 싶으면 where가 아닌 having을 사용해야한다.
select unit
from procure_procure_request
group by unit
having unit = '001';
그러나 having은 잘 쓰일 일이 없다.
AVG MIN MAX
AVG는 평균을 구하는 것이다. 아이템 코드 006부터 0011까지 품목을 조회하는 SQL문을 쓴다고 해보자
select *
from procure_item
where (item_cd > '006 and item_cd < '0011');
여기서 물건값 평균을 구하고 싶으면 * 대신 avg(cost)를 쓰면 된다. 물건 값 말고 다른 값 평균을 구하고 싶으면 avg(컬럼명)으로 변경하면 된다.
select avg(cost)
from procure_item
where (item_cd > '006' and item_cd < '0011');
여기서 최소값을 구하려면 avg(cost) 자리에 min(cost)를 넣으면 된다.
select min(cost)
from procure_item
where (item_cd > '006' and item_cd < '0015');
마찬가지로 최대값을 구하려면 min(cost) 대신 max(cost)를 넣으면 된다.
select max(cost)
from procure_item
where (item_cd > '006' and item_cd < '0015');
AVG, MIN, MAX 이 세 개는 통계 관리 낼 때 굉장히 자주 쓰인다.