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기준 내림차순으로 정렬하요 조회한다.
'IT지식 > 개발' 카테고리의 다른 글
[MySQL] UNSIGNED 사용하기 및 범위 (0) | 2020.05.20 |
---|---|
[PHP] CURL 사용하기. curl_exec() 문자 반환하기. CURLOPT_RETURNTRANSFER (0) | 2020.03.06 |
[책] 생활코딩! PHP+MySQL 후기 (0) | 2020.02.17 |
[Linux] awk 명령어 사용하기. awk '{print}' (0) | 2020.02.16 |
[Linux] grep으로 검색한 문자열에서 특정 문자 추출. uniq 중복 제거 안될 때. (cut uniq sort ) (0) | 2020.02.14 |