欢迎访问宙启技术站
智能推送

深入了解MySql中怎么用group by?(用法详解)

发布时间:2023-05-16 16:53:40

在MySql中,GROUP BY用于将结果集按照一个或多个列进行分组,从而统计出每个组内的数据。GROUP BY的用法非常灵活,我们可以根据不同的需求,应用在不同的场景中。

基本语法

GROUP BY的基本语法如下:

SELECT column1, column2, ..., columnN
FROM table_name
WHERE [condition]
GROUP BY column1, column2, ..., columnN;

其中,column1至columnN为要查询的列的名称,table_name为要查询的表名称,WHERE后跟查询条件。GROUP BY后跟一个或多个分组列的名称。

使用GROUP BY分组后,我们可以对每个分组进行聚合函数的计算(如COUNT、SUM、AVG、MAX、MIN等),并且可以使用HAVING过滤掉不满足条件的分组。

实例演示

假设我们有一个学生表,里面包含了学生的基本信息、所属班级、所学课程及成绩等信息。

我们想要统计每个班级、每门课程的平均成绩以及每个班级的总分,并且只显示平均成绩大于等于85分的班级。我们可以使用如下代码:

SELECT class, course, AVG(score), SUM(score)
FROM student
GROUP BY class, course
HAVING AVG(score) >= 85;

上述代码中,我们先通过SELECT指定要查询的列,然后用FROM指定表名。GROUP BY按照class和course两个列进行分组,并且计算出每个组内的平均成绩和总分。HAVING用于过滤掉平均成绩小于85分的分组。

注意,HAVING必须在GROUP BY之后,WHERE之前使用。

在这个例子中,我们得到了如下结果:

class    course    AVG(score)    SUM(score)
--------------------------------------------
1        Math      93            186
1        English   88            176
2        Math      88            176
2        English   91            182

其中,class和course为组合键,AVG(score)为平均成绩,SUM(score)为总分。

其他用例

除了基本用法外,GROUP BY还有其他常见的用例,例如:

1.用GROUP BY计算每个学生的总成绩: 可以使用如下代码计算每个学生的总成绩。

SELECT name, SUM(score) AS total
FROM student
GROUP BY name;

2.用GROUP BY统计每个班级的平均年龄: 假设学生表中包含了学生的姓名、班级和年龄等信息,我们可以使用如下代码计算每个班级的平均年龄。

SELECT class, AVG(age) as avg_age
FROM student
GROUP BY class;

3.在GROUP BY中应用多个函数: 可以在一个SELECT语句中使用多个聚合函数,例如:

SELECT class, MAX(score), MIN(score), AVG(score)
FROM student
GROUP BY class;

结语

在MySql中,GROUP BY是一个非常强大的工具,它可以将结果集按照一个或多个列进行分组,从而对分组数据进行聚合计算。我们需要根据实际需求灵活运用GROUP BY,以达到更好的查询效果。