【数据库】谈谈group by[通俗易懂]

2022-08-10 09:41:23 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

前一段时间写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

0 人点赞