SQL中GROUP BY语句与HAVING语句的使用

摘自:  https://www.cnblogs.com/leo0705/p/8473033.htmlphp

 

GROUP BY语句,通过研究和练习,终于明白如何使用了,在此记录一下同时添加了一个本身举的小例子,经过写这篇文章来加深下本身学习的效果,还能和你们分享下,同时也方便之后查阅,一举多得微笑html

 


 

1、GROUP BYsql

GROUP BY语句用来与聚合函数(aggregate functions such as COUNT, SUM, AVG, MIN, or MAX.)联合使用来获得一个或多个列的结果集。express

语法以下:函数

SELECT column1, column2, ... column_n, aggregate_function (expression)            学习

FROM tables            spa

WHERE predicates            htm

GROUP BY column1, column2, ... column_n;blog

 


 

举例get

好比说咱们有一个学生表格(student),包含学号(id),课程(course),分数(score)等等多个列,咱们想经过查询获得每一个学生选了几门课程,此时咱们就能够联合使用COUNT函数与GROUP BY语句来获得这一结果

SELECT id, COUNT(course) as numcourse

FROM student

GROUP BY id

由于咱们是使用学号来进行分组的,这样COUNT函数就是在以学号分组的前提下来实现的,经过COUNT(course)就能够计算每个学号对应的课程数。

 

注意

由于聚合函数经过做用于一组数据而只返回一个单个值,所以,在SELECT语句中出现的元素要么为一个聚合函数的输入值,要么为GROUP BY语句的参数,不然会出错。

例如,对于上面提到的表格,咱们作一个这样的查询:

SELECT id, COUNT(course) as numcourse, score

FROM student

GROUP BY id

此时查询便会出错,错误提示以下:

Column ‘student.score' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

出现以上错误的缘由是由于一个学生id对应多个分数,若是咱们简单的在SELECT语句中写上score,则没法判断应该输出哪个分数。若是想用score做为select语句的参数能够将它用做一个聚合函数的输入值,以下例,咱们能够获得每一个学生所选的课程门数以及每一个学生的平均分数:

SELECT id, COUNT(course) as numcourse, AVG(score) as avgscore

FROM student

GROUP BY id

 


 

2、HAVING

HAVING语句一般与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。

HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。

 

语法:

SELECT column1, column2, ... column_n, aggregate_function (expression)
FROM tables
WHERE predicates
GROUP BY column1, column2, ... column_n
HAVING condition1 ... condition_n;


 

一样使用本文中的学生表格,若是想查询平均分高于80分的学生记录能够这样写:

SELECT id, COUNT(course) as numcourse, AVG(score) as avgscore

FROM student

GROUP BY id

HAVING AVG(score)>=80;

在这里,若是用WHERE代替HAVING就会出错

参考资料:

http://www.w3schools.com/sql/sql_groupby.asp

http://www.techonthenet.com/sql/group_by.php

http://www.w3schools.com/sql/sql_having.asp

http://www.techonthenet.com/sql/having.php

http://msdn.microsoft.com/en-us/library/ms180199.aspx

相关文章
相关标签/搜索