大家好,又见面了,我是你们的朋友全栈君。
前一段时间写SQL比较频繁,有时候想要用group by 来进行分组,却总是报错,今天就总结一下group by 的用法。
group by 语句通常和合计函数一起使用,根据一个或多个列队结果集进行分组。
group by 语法
现在我们对上面的数据进行操作:统计每一门课程选修的人数:
代码语言:javascript复制SELECT COUNT(name) AS number,course FROM `groupbytest` GROUP BY course
查询结果如下:
这就是最简单的group by的用法。
而我之前是这样用的:
代码语言:javascript复制SELECT * FROM `groupbytest` GROUP BY course
SELECT NAME,course FROM `groupbytest` GROUP BY course
在mysql中,可以查询到结果集,如下:
跟原始数据对比,可以发现,查询到的结果集是每一门课程的第一条记录,这样就丢失了一部分数据。
如果是在sql server中这么写是会直接报错的,大家感兴趣的话可以测试一下。
其实group by函数是用来跟数据库的统计函数结合使用,对数据进行分组统计的。这个问题困扰了我好久,在网上看了一些介绍,自己又写了几条SQL才明白了他的用法。
下面就为大家介绍一下group by的一些常用用法:
1.group by 多个列
代码语言:javascript复制SELECT name,sex,course FROM `groupbytest` GROUP BY sex,course
查询结果:
代码语言:javascript复制SELECT name,sex,course FROM `groupbytest` GROUP BY course,sex
对比以上两条SQL查出来的结果集,可以看出,查询结果跟group by 后面的列的顺序是有关系的。 第一条是先根据sex进行分组,再根据course分组,而第二条是先根据course分组,再根据sex分组。
2.group by 和count函数一起使用:对学生的性别进行统计。
代码语言:javascript复制SELECT COUNT(*) AS number,sex FROM `groupbytest` GROUP BY sex
3.group by 和sum函数一起使用:对分数进行汇总。
代码语言:javascript复制SELECT SUM(source) AS total,course FROM `groupbytest` GROUP BY course
查询结果:
4.group by 和avg函数一起使用:求每一门课程的平均值。
代码语言:javascript复制SELECT AVG(source) AS total,course FROM `groupbytest` GROUP BY course
5.group by和where一起使用:
代码语言:javascript复制SELECT COUNT(*),course FROM `groupbytest` WHERE sex = '男' GROUP BY course
结果集:
代码语言:javascript复制SELECT COUNT(*),course FROM `groupbytest` WHERE sex = '女' GROUP BY course
结果集:
关于group by的用法还有很多,今天就先介绍到这里。还有我是在mysql的环境下做的一些例子,在SQL server中可能会有一些差异,到时候灵活应用就好了。希望能给大家带来帮助~
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105669.html原文链接:https://javaforall.cn