바닥코딩

Group by , Having 절 본문

데이터 베이스/SQL

Group by , Having 절

개발공부개발공부 2020. 3. 3. 16:32

집계함수(Aggregate Function)

  집계함수는 그룹당 단 하나의 결과를 돌려주는 함수를 이야기 한다 그러기 위해선 그룹이라는 개념이 존재해야 하는데 데 그룹은 한테이블 전체가 될수도 있고 소수의 컬럼만 해당되는 소그룹 여러개를 의미할수도 있다. 정리하자면 

  1.  여러 행들의 그룹이 모여서 단 하나의 결과를 돌려주는 함수 
  2.  Group by 절은 여러 행들을 소그룹화 한다 
  3.  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 절에 작성한다 

해당 쿼리를 실행하면 아래와 같은 결과를 얻을 수 있다.