学习重点
- group by 可以与聚合函数共同使用
- 聚合函数中包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来。
- 聚合函数与group by 时的注意事项4点:
①只能写在select 子句之中
②group by 子句中不能使用select子句中列的别名
③group by 子句的聚合结果是无序的
④where 子句中不能使用聚合函数
group by 子句
该句子对表进行切分,将目标列进行分组处理,相同的即为一组。
例子:
select shohin_hunrui,count(*)
from shohin
group by shohin_bunrui;
含义:在表shohin中对列shohin_hunruin 进行分组展示,并且计算每组因子个数。
另外:
group by 与select 一样 可以通过逗号指定多列。
子句书写顺序:1.select→2.from→3.where→4.group by
顺序不可改变也不能互相替换
(group by 与 distinct 性能对比)
https://www.cnblogs.com/zox2011/archive/2012/09/12/2681797.html
使用where时 group by 的执行结果
使用where进行聚合处理时,会先根据where指定的条件进行过滤,然后再进行聚合处理。
例子:
select shiire_tanka,count(*)
from shohin
where shohin_bunrui = ‘衣服’
group by shiire_tanka;
含义:在表shohin中查询 列shohin_bunrui中 值为衣服的数据,并且对shiire_tanka内容进行分组处理,count(*),输出各组因子数量。
【语句运行顺序】
from→where →group by→select
与聚合函数和group by有关的常见错误
△ 常见错误①
select中书写多余的列,select中只能存在以下是那种元素:
- 常熟
- 聚合函数
- group by 中指定的列名(也就是聚合键)
错误示范:
select a,b
from ttt
group by a;
这串代码运行会报错,因为group by 的是a ,所以在select 中作为聚合键的a可以但是除此之外的b 则不可以。
提示:使用group by时,select不能出现聚合键之外的列名。
△ 常见错误②
group by 中写了列名的别名。
错误示范:
select shohin bunrui as sb,count(*)
from shohin
group by sb
上述 sb 这种情况便会出现错误,此错误见【语句运行顺序】
from→where →group by→select
提示:group by 中不能是用select中定义的别名。
△ 常见错误③
group by 的结果能够排序吗?
答案是否定的,该子句查询结果显示是无序的!
△ 常见错误④
在where中使用聚合函数
错误示范:
select shohin_bunrui,count()
from shohin
where count() = 2
group by shohin_bunrui;
提示:上述代码中count(*)属于聚合函数,代码运行报错。
只有select 和 having 中能够使用聚合函数。