째의 개발 기록방

[MyBatis/MariaDB] 그룹함수 / GROUP BY절 / HAVING절 본문

Back End/SQL

[MyBatis/MariaDB] 그룹함수 / GROUP BY절 / HAVING절

째린이 2022. 1. 4. 17:24
  • 그룹함수

- 그룹 함수는 검색된 여러 행을 이용하여 통계정보를 계산하는 함수이다.

그룹 함수의 종류에는 COUNT, MAX, MIN, SUM, AVG, STDDEV, VARIANCE 등이 있다.

 

1. 그룹함수는 NULL값이 있는 컬럼은 조회에 포함시키지 않는다.

2. LOW가 없는 테이블에 그룹함수 COUNT()를 사용 시 0이 출력되며 SUM()를 사용시 NULL 값이 출력된다.

3. COUNT, MAX 와 MIN은 문자, 숫자, 날짜 데이터 모두에게서 사용할 수 있다. 그러나 AVG SUM, VARIANCE, STDDEV는 NUMBER만 사용 가능하다.

4. EXPR이 있는 인수들의 자료 형태는 CHAR, VARCHAR2, NUMBER, DATE 형이 될 수도 있다.

 

함수명 기능 사용
 COUNT  행의 수를 계산한다.   COUNT(컬럼 | *) 
 MAX  값들 중에 최대 값을 반환한다.   MAX(컬럼) 
 MIN  값들 중에 최소 값을 반환한다.   MIN(컬럼) 
 AVG  평균 값을 계산한다.   AVG(컬럼) 
 SUM  총 합계를 계산한다.   SUM(컬럼)
 VARIANCE  분산을 계산한다.   VARIANCE(컬럼) 
 STDDEV  표준편차를 계산한다.   STDDEV(컬럼) 

 


 

  • GROUP BY

특정 속성을 기준으로 그룹화 하여 검색할 때 그룹화 할 속성을 지정한다.

GROUP BY 절은 반드시 그룹함수와 함께 쓰이며 그룹 함수의 결과 값은 GROUP BY 절에 기술된 컬럼의 항목들의 행의 개수에 의해 결정된다.

 

  • SELECT 절에 그룹 함수와 컬럼명이 같이 기술된 경우 해당 컬럼은 반드시 GROUP BY절에 그룹화 돼야 한다.
  • where절 다음에 수행된다.
  • 결과 값이 정렬되길 원한다면 반드시 ORDER BY 절을 추가한다.

 

SELECT [DISTINCT] 컬럼, 그룹 함수(컬럼)

FROM 테이블명

[WHERE 조건]

[GROUP BY Group대상]

[ORDER BY 정렬대상 [ASC/DESC]]

 

SELECT [DISTINCT] = 중복제거

* SELECT count (DISTINCT 컬럼명) from 테이블명

* ORDER BY절은 항상 select문 마지막에 위치한다.(쿼리문 중 가장 나중에 실행되기 때문)

 


  • HAVING

where 절과 같은 조건절이다.

group by가 where절 다음에 수행되는것처럼 having은 group by 다음에 수행된다.

 

SELECT 컬럼

FROM 테이블명

[WHERE 조건]

[GROUP BY Group대상]

[HAVING count(name)>1;]

[ORDER BY 정렬대상 [ASC/DESC]]

 

 

WHERE와 HAVING의 차이점 간단 요약

- Having은 그룹화 또는 집계가 발생한 후 레코드를 필터링하는데 사용된다.
- Where은 그룹화 또는 집계가 발생하기 전에 레코드를 필터링하는데 사용된다.

 

 

 

 

 

출처: https://yoo-hyeok.tistory.com/91 [유혁의 개발 스토리], https://velog.io/@ljs7463/SQL-having-%EA%B3%BC-where-%EC%B0%A8%EC%9D%B4