데이터베이스 정리 11 - 그루핑
그루핑(grouping) : 로우들을 여러 개 그룹으로 나눈다는 의미
gender 칼럼을 기준으로 같은 값을 갖는 로우들은 같은 그룹에 속하게 된다.
그런데 gender의 결과를 보면 DISTINCT의 실행결과와 같다.
하지만 외부적으로는 같아 보이지만 내부적으로는 정말 다르다.
gender의 m 안에는 gender 컬럼의 값이 m인 모든 row들이 들어 있고, f 안에는 값이 f인 row가 들어가 있다. 각각의 row는 하나의 그룹을 나타내고 있는 것이다.
COUNT - 조회되는 row의 개수를 구해주는 표현식
즉 위 구문에서는 전체 테이블에 대해서 실행되는 것이 아니라 f와 m에 대해 각각 조회되고 있는 것이다.
다른 예)
SUBSTRING은 문자열 함수로 문자열에서 원하는 부분만 뽑아내는 함수이다.
지금 위 구문에서 address 로우에서 첫 번째로 시작하고 두 번째 글자까지 뽑아냅니다.
2개의 그루핑 기준)
빨간 줄을 보면 같은 서울이라도 성별이 m인 회원은 4명, f인 회원은 1명이라는 것을 확인할 수 있다.
HAVING - 원하는 그룹만 선별하고 싶은 경우
WHERE와 HAVING은 그 의미가 비슷해 보이지만 다른 목적을 가진 구문이다.
WHERE은 테이블에서 맨 처음 로우들을 조회할 때 조건을 설정하기 위한 구문이다.
HAVING은 이미 조회된 로우들을 다시 그룹핑했을 때 생성된 그룹들 중에서 다시 필터링을 할 때 쓰는 구문이다.
잘 구별해서 사용해야 한다!!
주의할 점
1. GROUP BY 절 뒤에 쓴 칼럼 이름들만, SELECT 절 뒤에 사용 할 수 있다.
2. 대신 SELECT 절 뒤에서 집계 함수 이외의 컬럼 이름을 인자로 넣는 것은 허용된다.