mysql> select * from hero_list;
+----+------+---------+
| no | type | name |
+----+------+---------+
| 0 | 1 | ABC |
| 1 | 1 | DEF |
| 2 | 1 | ZEF |
| 3 | 2 | ALT |
| 4 | 2 | KEVIN |
| 5 | 2 | DRAGOON |
| 6 | 1 | as |
| 7 | 1 | zo |
+----+------+---------+
8 rows in set (0.00 sec)
mysql> select type, count(name) as cnt from hero_list group by type;
+------+-----+
| type | cnt |
+------+-----+
| 1 | 5 |
| 2 | 3 |
+------+-----+
2 rows in set (0.01 sec)
type과 count(name)을 선택한다,
from hero_list table에서,
group by type; type으로 이 둘을 묶어서 보여준다
결과적으로
보길 원하는 column은 type과 count(name) column이고
table은 hero_list를 사용하고,
group by type으로 type을 기준으로 그룹화한다.
type의 값은 1, 2 뿐이므로 1끼리 묶어주고 2끼리 묶어준다
그리고 type과 count(name)을 보여준다 type이 두 번 나오는데 이는 type으로 묶어준 결과를
type으로 보고싶다는 것이다.
type을 기준으로 묶었는데 type을 빼고 보여주면 type으로 묶인건지 결과만 보고는 알 수 없기 때문이다.
type을 빼고 sql문을 작성해보자.
select no, count(name) from hero_list group by type;
실행하면...
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'hero.hero_list.no' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
이런 에러가 발생한다.