SELECT * FROM employee group by gender;
为什么只显示一条数据呢?按理说,应该是像excel一样,这个组后面跟着所有数据,没错就是这样,解释一下
执行下面语句,得到左边结果
- SELECT name FROM test
-
- GROUP BY name
id和number中有的单元格里面的内容是多个值的,只会显示一个。
当然name表格不止一个aa但是,由于是按name分组,所以select name是可以的。
知识点:
1、count(*),count(列名)都可以,区别在于,count(列名)是统计非NULL的行数
再举个例子
- SELECT name,sex FROM tb_students_info
- GROUP BY sex;
表里有很多男生女生,显然只返回了一条记录
那想要都显示怎么办?
关键字:group_concat()
GROUP BY 关键字可以和 GROUP_CONCAT() 函数一起使用。GROUP_CONCAT() 函数会把每个分组的字段值都显示出来。
- SELECT sex, GROUP_CONCAT(name) FROM tb_students_info
- GROUP BY sex;
所以说GROUP BY 一般不单独使用。
那么对于单元格有多个数据的情况怎么办呢?除了都显示,我们还常用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。聚合函数包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()等。其中,COUNT() 用来统计每个组内记录的条数;SUM() 用来计算每个组内字段值的总和;AVG() 用来计算每个组内字段值的平均值;MAX() 用来查询每个组内字段的最大值;MIN() 用来查询每个组内字段的最小值。
多列分组
下面根据 tb_students_info 表中的 age 和 sex 字段进行分组查询。SQL 语句和运行结果如下:
- SELECT age,sex,GROUP_CONCAT(name) FROM tb_students_info
- GROUP BY age,sex;
上面实例在分组过程中,先按照 age 字段进行分组,当 age 字段值相等时,再把 age 字段值相等的记录按照 sex 字段进行分组。 也就是age,sex这俩一样的为一组
多个字段分组查询时,会先按照第一个字段进行分组。如果第一个字段中有相同的值,MySQL 才会按照第二个字段进行分组。如果第一个字段中的数据都是唯一的,那么 MySQL 将不再对第二个字段进行分组。