总结一下MySQL中查询记录操作中的GROUP BY语句,查遗补漏。
表名:testusers,字段记录如图,以前create
的直接拿来用,将就一下。(懒即生产力)
一)作用:GROUP BY 语句根据一个或多个列对结果集进行分组。会把值相同放到一个组中,最终查询出的结果只会显示组中一条记录。(字母不好理解没关系,看下面的例子秒懂)
二)example:
1)基本用法:
根据 sex 字段分组,查询用户名、年龄、电话、性别。
这就分组成功了!男的一组 女的一组,还有一组那啥,咳咳,搞不清楚的,但是都只显示了组中一条记录,我们的效果不够明显,接着看下面的例子。)
2)GROUP BY 语句中的GROUP_CONCAT()函数
根据sex 字段进行分组并查看username字段和age字段的详细信息。(这下对基本用法就很好理解了。因为他默认只显示了组中一条记录,如果想看组内所以的用户信息,就需要用到GROUP_CONCAT()函数。接着往下↓)
3)COUNT()函数:统计记录总数
根据sex 字段分组,查询性别和用户名,年龄的详细信息并统计各组用户数量。
(查出来记录以后自己数?太萌了吧?利用COUNT()函数统计记录总数。当然细心的兄dei已经发现问题了,为什么只有三个男的,COUNT()函数统计出来四个?[难道有两根?!] ,咳咳,是因为在COUNT()函数中,写COUNT(*)会统计我们表中的NULL值,如果不想统计NULL值,请写COUNT(字段名)。看我们上面的表中,最后一条记录的username是NULL,所以只有三个男的却统计出四根diao.呸,统计出四个男生。PS:代码段中AS xxx=取别名)
4)加WHERE
条件
在年龄大于等于18的范围内,根据sex分组,查询性别和用户名、年龄的详细信息并统计各组用户数量(就是在上条基础上加了WHERE
条件,”未满18岁,禁止观看!”)
5)聚合函数[‘SUM()求和函数’,’MAX()函数:求最大值’,’MIN()函数:求最小值’,’AVG()函数:求平均值’]。一个例子整合运用(计算每组用户薪水的各项值)。
6):HAVING 子句:对分组结果进行二次筛选
根据性别分组,查询性别和用户名,年龄的详细信息并统计各组用户总数,得出结果后进行二次筛选出用户总数在5人及以上的组。相当于WHERE是一次筛选,HAVING是在二/再次筛选.
7)WITH ROLLUP子句:
可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
也就是说,当我们进行分组操作以后,又想再看总的信息,或者还有其他类似操作,普通GROUP BY语句是不能实现的,就需要用到有 WITH ROLLUP 子句的 GROUP BY语句
再肤浅一点,就是会在记录末尾添加一条记录,是上面所有记录的总和。