使用group by可以对查询结果进行分组,但是group by需要和sql的聚合函数联合使用。sql的聚合函数包括以下这些
1.count()求符合条件的记录数
2.max()和min()求某一列的最大值和最小值
3.avg()求某一列的平均值
4.sum()求某一列的总和
group by的使用基本格式如下:
select 列名列表
from 表名
where 条件
group by 列名
下面对group by的使用结合案例具体说明。
上图是表bookinfo,包含了 一系列的字段 ,现在我们按照出版社来对表进行分组统计
select publish as 出版社,count (publish) as 图书数量
from BookInfo
group by publish
select publish as 出版社,count (publish) as 图书数量
这行代码首先将publish设置一个别名 出版社,然后 count(publish)as 图书数量,是将publish进行计数
from bookinfo 表示数据来源于表bookinfo
group by publish 表示对数据表按照publish字段进行分类,相同的publish为一类,count(publish)即为统计一共多少类。
执行结果如下图
再举个例子,同样是上面的bookinfo,我们对出版社分组,然后对每个出版社出版书籍的价格求平均值
select publish '出版社',AVG(price) '平均价格'
from bookinfo
group by publish
执行结果如下
需要注意的是,select后面跟的列名,必须包含在聚合函数中,或者包含在group by子句中,比如上式中,字段名publish就包含在group by子句中,而price包含在avg聚合函数里。
group by还可以与having子句一起使用,对group by的内容进行限制,筛选出符合要求的内容
select publish '出版社',AVG(price) '平均价格'
from bookinfo
group by publish
having avg(price)>55
需要注意的是having必须和group by配合使用不可单独使用,where是从表中筛选,having是从组中筛选