본문 바로가기
IT지식/개발

[MySQL] GROUP BY 그룹화 하여 조회하기

by 7$ 2020. 3. 2.
mysql> SELECT * FROM groupby;
+------+-------+------+---------+
| id   | name  | age  | address |
+------+-------+------+---------+
|    1 | seven |   30 | seoul   |
|    1 | seven |   30 |         |
|    1 | seven |   32 |         |
|    1 | seven |   31 |         |
|    1 | seven |   31 | busan   |
|    2 | seven |   31 | busan   |
|    3 | seven |   31 | busan   |
|    3 | seven |   32 | busan   |
+------+------+------+---------+
8 rows in set (0.00 sec)

 위와 같은 데이터가 있다. 그룹화 해보자

 

mysql> SELECT id, COUNT(id) AS cnt FROM groupby GROUP BY id;
+------+-----+
| id   | cnt |
+------+-----+
|    1 |   5 |
|    2 |   1 |
|    3 |   2 |
+------+-----+

중복되는 id의 갯수를 카운트 하기.  select 구문에 GROUP BY 하려는 컬럼이 포함되어있어야 한다.

 

 

mysql> SELECT id, COUNT(id) AS cnt FROM groupby GROUP BY id HAVING cnt >= 2;
+------+-----+
| id   | cnt |
+------+-----+
|    1 |   5 |
|    3 |   2 |
+------+-----+
2 rows in set (0.00 sec)

 GROUP BY 후 HAVING 절을 사용하기.

중복되는 id의 갯수를 카운트 후  cnt가 2를 초과하는 행을 출력.

 

mysql> SELECT id, COUNT(id) AS cnt FROM groupby WHERE id = 1 GROUP BY id HAVING cnt >= 2;
+------+-----+
| id   | cnt |
+------+-----+
|    1 |   5 |
+------+-----+
1 row in set (0.00 sec)

WHERE 절을 사용하기.

id가 1인 항목만 조회하여 GROUP BY 후 cnt가 2를 초과하는 행 출력.

 

 

mysql> SELECT id, COUNT(id) AS cnt FROM groupby WHERE id > 0 GROUP BY id HAVING cnt >= 1 ORDER BY id DESC;
+------+-----+
| id   | cnt |
+------+-----+
|    3 |   2 |
|    2 |   1 |
|    1 |   5 |
+------+-----+
3 rows in set (0.00 sec)
SELECT 컬럼 FROM 테이블 [WHERE 조건식] GROUP BY 그룹화할 컬럼 [HAVING 조건식] ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];

id가 0 초과인 중복된 id의 cnt하여 그룹화 하고 cnt가 1이상인 것을 id기준 내림차순으로 정렬하요 조회한다.

댓글