DB_007_mySQL_GROUP

AMJ·2023년 4월 3일
0

db_log

목록 보기
7/14

그룹 함수

  • 컬럼값으로 그룹화하여 그룹별로 결과를 출력하는 함수

그룹 함수 규칙

  • 반드시 하나의 값만을 반환한다.
  • 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 
# 조건을 주어 데이터 값 변경 (join기능으로 대체가능)
# 조건이 더 많을 경우 (case로 대체 가능)
IF(deptId = 1, '홍보', '기획') AS `부서명`,
# group화한 정보에서 나열 및 정렬 (DISTINCT : 중복제거)
GROUP_CONCAT(DISTINCT `name` ORDER BY id DESC SEPARATOR ', ') AS `사원리스트`,
# (TRUNCATE : 소수점 자리수) 
# (CONCAT : 데이터에 문자 결합)
CONCAT(TRUNCATE(AVG(salary), 0), '만원') AS `평균연봉`,
CONCAT(MAX(salary), '만원') AS `최고연봉`,
CONCAT(MIN(salary), '만원') AS `최소연봉`,
CONCAT(COUNT(*), '명') AS `사원수`
# 기준 Table
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을 사용한다.
profile
재미있는 것들

0개의 댓글