GROUP BY
: 컬럼에서 동일한 값을 가지는 로우를 그룹화하는 키워드
GROUP BY [컬럼 이름]
- 주로 그룹 별 데이터를 집계할 때 사용한다.
- GROUP BY 가 쓰인 쿼리의 SELECT 절에는 GROUP BY 대상 컬럼과 그룹 함수만 사용 가능하다.
- 여러 컬럼으로 그룹화도 가능하다. (키워드 뒤에 [컬럼 이름]을 복수 개 입력하면 된다.
쿼리문법SLECT [GROUP BY 대상 컬럼 이름],...,[그룹함수] FROM [테이블 이름] WHERE 조건식 GROUP BY [컬럼이름]
HAVING
: 가져올 데이터 그룹에 조건을 지정해주는 키워드
- HAVIG조건식 형식으로 사용한다
- 조건식이 True(참)이 되는 그룹만 선택합니다
- HAVIG 절의 조건식에서는 그룹 함수를 활용합니다.
쿼리 문법SELECT[컬럼 이름],...,[그룹 함수] FORM[테이블 이름] WHERE 조건식 GROUP BY[컬럼 이름] HAVING 조건식;
COUNT
: 그룹의 값 수를 세는 함수
COUNT([컬럼 이름])
형식으로 SELECT, HAVING 절에서 사용한다.- 집계할 컬럼 이름은 그룹의 기준이 되는 컬럼 이름과 같아도 되고, 같지 않아도 된다.
- COUNT(1) 은 하나의 값을 1로 세어주는 표현이다.
- GROUP BY가 없는 쿼리에서도 사용 가능하다. 이때는 전체 로우에 함수가 적용된다.
쿼리 문법SELECT[컬럼 이름],...,COUNT([컬럼 이름]) FROM [테이블 이름] GROUP BY[컬럼 이름] HAVING조건문;
SUM([컬럼 이름])
형식으로 SELECT, HAVING 절에서 사용한다.SELECT[컬럼 이름],...,SUM([컬럼 이름]) FROM [테이블 이름] GROUP BY[컬럼 이름] HAVING조건문;
AVG([컬럼이름])
형식으로 SELECT, HAVING 절에서 사용한다.
쿼리 문법SELECT[컬럼 이름],...,AVG([컬럼 이름]) FROM[테이블 이름] GROUP BY[컬럼 이름] HAVING조건문;
MIN([컬럼 이름])
형식으로 SELECT, HAVING 절에서 사용합니다.
쿼리 문법SELECT[컬럼 이름],...,MIN([컬럼 이름]) FROM[테이블 이름] GROUP BY[컬럼 이름] HAVING조건문;
키워드 | 문법 | 작성순서 | 실행순서 |
---|---|---|---|
SELECT | SELECT[컬럼 이름] | 1 | 5 |
FROM | FROM[테이블 이름] | 2 | 1 |
WHERE | WHERE조건식 | 3 | 2 |
GROUP BY | GROUP BY[컬럼 이름] | 4 | 3 |
HAVING | HAVING조건식 | 5 | 4 |
ORDER BY | ORDER BY[컬럼 이름] | 6 | 6 |
쿼리 실습
DROP DATABASE IF EXISTS pokemon; CREATE DATABASE pokemon; USE pokemon; CREATE TABLE mypokemon ( number int, name varchar(20), type varchar(10), height float, weight float ); INSERT INTO mypokemon (number, name, type, height, weight) VALUES (10, 'caterpie', 'bug', 0.3, 2.9), (25, 'pikachu', 'electric', 0.4, 6), (26, 'raichu', 'electric', 0.8, 30), (125, 'electabuzz', 'electric', 1.1, 30), (133, 'eevee', 'normal', 0.3, 6.5), (137, 'porygon', 'normal', 0.8, 36.5), (152, 'chikoirita', 'grass', 0.9, 6.4), (153, 'bayleef', 'grass', 1.2, 15.8), (172, 'pichu', 'electric', 0.3, 2), (470, 'leafeon', 'grass', 1, 25.5);
쿼리
SELECT type, COUNT(1),MAX(weight) FROM mypokemon WHERE name LIKE'%a0%' GROUP BY type HAVING MAX(height)>1 ORDER BY 3;
- 입력 순서
1) SELECT type, COUNT(1),MAX(weight)
2) FROM mypokemon
3) WHERE name LIKE'%a0%'
4) GROUP BY type
5) HAVING MAX(height)>1
6) ORDER BY 3;
- 실행순서
5) SELECT type, COUNT(1),MAX(weight)
1) FROM mypokemon
2) WHERE name LIKE'%a0%'
3) GROUP BY type
4) HAVING MAX(height)>1
6) ORDER BY 3;