바닥코딩
Group by , Having 절 본문
집계함수(Aggregate Function)
집계함수는 그룹당 단 하나의 결과를 돌려주는 함수를 이야기 한다 그러기 위해선 그룹이라는 개념이 존재해야 하는데 데 그룹은 한테이블 전체가 될수도 있고 소수의 컬럼만 해당되는 소그룹 여러개를 의미할수도 있다. 정리하자면
- 여러 행들의 그룹이 모여서 단 하나의 결과를 돌려주는 함수
- Group by 절은 여러 행들을 소그룹화 한다
- SELECT, HAVING, ODERBY 절에 사용할 수 있다
집계함수 | 사용 목적 |
COUNT(*) | NULL 값을 포함한 행의 개수를 출력 |
COUNT(표현식) | 표련식의 값이 NULL인 것을 제외한 행의 개수 출력 |
SUM | NULL 값을 제외한 합계 출력 |
AVG | NULL 값을 제외한 평균을 출력 |
MIN | 표현식의 최소값을 출력 |
MAX | 표현식의 최대값을 출력 |
STDDEV | 표현식의 표준 편차를 출력한다 |
GROUP BY 절
WHERE 절을 통해 조건에 맞는 데이터를 조회하면 조건에 맞는 데이터를 찾아주지만 테이블에 1차적으로 존재하는 데이터 이외의 정보에 대한 2차 가공에 있어서는 부족한 면을 보인다 따라서 GROUP BY 절은 FROM 절과 WHERE 절 뒤에 오며 데이터들을 작은 그룹으로 분류하여 통계정보등을 얻을 때 추가로 사용한다 이전에 포스팅한 mysql 덤프를 통해 groupo by 절을 테스트 해보려 한다
해당 쿼리를 실행하면
위와 같은 결과를 반환한다 employees 라는 테이블 내에 gender 값이 M인 행의 개수를 출력하는 문장이다 그런데 이 문장을 다르게 한번 작성해 보겠다
위와 같이 having 절을 사용하지 않고 where 절에 조건을 넣어도 반환하는 결과는 같다 그렇다면 왜 굳이 where 절이 있는데 group by 절에 having 절을 사용하는 걸까?
위와 같은 문장을 작성 하고자 한다 판매량 평균이 60000이상인 판매자 번호를 출력을 하는 쿼리지만 이 쿼리는 오류를 발생시킨다 여러값을 반환할 수 있는 where절에 집계함수를 상용하는 것이 group 함수에 오류를 발생기키기 때문이다 따라서 조건절에 집계함수를 사용할 수 있도록 집계함수 조건을 having 절에 작성한다
해당 쿼리를 실행하면 아래와 같은 결과를 얻을 수 있다.
'데이터 베이스 > SQL' 카테고리의 다른 글
그룹 함수(GROUP FUNCTION) (0) | 2020.03.05 |
---|---|
STANDARD SQL과 집합 연산자(SET OPERATOR) (0) | 2020.03.04 |
mysql/mariaDB 덤프 받아 사용하기 (0) | 2020.03.03 |
트랜잭션과 TCL(Transaction Control Language) (0) | 2020.03.03 |
[tool 소개]heidiSQL (0) | 2020.03.03 |