msyql having和group by子句的二个例子

发布时间:2019-12-11编辑:脚本学堂
为大家举二个having与group by子句的例子,正在研究mysql的having或group by子句的朋友,建议参考下。

在开始下文的例子之前,建议大家先了解下常用的聚合函数, 例如SUM, COUNT, MAX, AVG等,和其它函数的根本区别就是它们一般作用在多条记录上。

假如数据库中有A表,包括学生,学科,成绩三个字段
数据库结构为
学生 学科 成绩
张三 语文 80
张三 数学 100
李四 语文 70
李四 数学 80
李四 英语 80

SELECT SUM(成绩) FROM A

返回所有成绩的总和。

通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。
当你指定 GROUP BY 学科 时, 属于同一个学科的一组数据将只能返回一行值.
也就是说,表中所有除学科外的字段,只能通过 SUM, COUNT等聚合函数运算后返回一个值.

HAVING子句可以让我们筛选成组后的各组数据.
WHERE子句在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前. 而 HAVING子句在聚合后对组记录进行筛选。

一、显示每个学生的总成绩.

SELECT 学科, SUM(成绩) FROM A GROUP BY 学生

先以学生把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。

二、 显示每个学生的总成绩,总成绩大于160的。

SELECT 学科, SUM(成绩) FROM A GROUP BY 学生 HAVING SUM(成绩)>160

此处不能用where来筛选超过160的学生,因为表中不存在这样一条记录。
但是,HAVING子句可以完成筛选并分组,having就是用来分组的咯。