그룹 함수
- 컬럼값으로 그룹화하여 그룹별로 결과를 출력하는 함수
그룹 함수 규칙
- 반드시 하나의 값만을 반환한다.
- NULL 값은 무시된다.
- NULL 값이 무시되지 않으려면 NVL, NVL2와 같은 함수를 이용한다.
- GROUP BY 설정 없이 일반 컬럼과 기술될 수 없다.
그룹 함수의 종류
COUNT
입력되는 데이터들의 건수를 출력
SUM
입력되는 데이터들의 합계값을 출력
AVG
입력되는 데이터들의 평균값을 출력
MAX
입력되는 데이터들 중 최고 값을 출력
MIN
입력되는 데이터들 중 최저 값을 출력
STDDEV
입력되는 데이터 값들의 표준 편차값 출력
VARIANCE
입력되는 데이터 값들의 분산값 출력
ROLLUP
입력되는 데이터들의 소계값을 자동으로 계산해서 출력
CUBE
입력되는 데이터들의 소계 및 전체 총계를 자동 계산 후 출력
GROUPING
해당 칼럼이 그룹에 사용되었는지 여부를 1 또는 0으로 반환
GROUPINGSET
한번의 질의로 여러개의 그룹화 가능
Ex. CODE
group function
SELECT count(*) "총건수",
sum(price) "가격합",
round(avg(price),2) "평균가격",
max(price) "최대가격",
min(price) "최소가격"
FROM products;
group by
SELECT CategoryID, round(avg(Price),2) "평균가격" FROM Products
GROUP BY CategoryID;
SELECT CategoryID, SupplierID, round(avg(Price),2) "평균가격"
FROM Products
GROUP BY CategoryID, SupplierID;
IF & GROUP_CONCAT & TRUNCATE
SELECT
IF(deptId = 1, '홍보', '기획') AS `부서명`,
GROUP_CONCAT(DISTINCT `name` ORDER BY id DESC SEPARATOR ', ') AS `사원리스트`,
CONCAT(TRUNCATE(AVG(salary), 0), '만원') AS `평균연봉`,
CONCAT(MAX(salary), '만원') AS `최고연봉`,
CONCAT(MIN(salary), '만원') AS `최소연봉`,
CONCAT(COUNT(*), '명') AS `사원수`
FROM emp
GROUP BY deptId;
IF & CASE
SELECT IF(deptId = 1, '홍보', '기획')
AS `부서명`,
```>
```sql
SELECT CASE
WHEN deptId = 1
THEN '홍보'
WHEN deptId = 2
THEN '기획'
ELSE '무소속'
END AS `부서명`,
group by & having
- HAVING : WHERE처럼 조건을 걸 때 사용된다.
- group by에 의해 필터링된 데이터에 조건을 걸 때.
- group by 뒤에 사용되어야한다.
- group by 전에 필터링 시 WHERE을 사용한다.