159
有点难度
sum over,详见sum() over() 函数用于累加计算
160
子查询
窗口函数是什么?
窗口函数与数据分组功能相似,可指定数据窗口进行统计分析,但窗口函数与数据分组又有所区别,窗口函数对每个组返回多行,而数据分组对每个组只返回一行;窗口函数指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,而数据分组是针对所有数据进行统计,窗口函数的写法如下。
<窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>)
窗口函数主要有两种,一种是专用窗口函数,包括rank、dense_rank、row_number等。另一种是聚合函数,包括sum、avg、count、max、min等,下面逐一介绍窗口函数的五个功能,分别是聚合、排序、极值、移动、切片。
详见:
窗口函数执行顺序:
①正常情况下sql语句的执行顺序为
from - join - where - group by - having - select - order by - limit
②窗口函数的执行顺序(逻辑上)在from,join,where,group by,having之后,在order by,limit,select,distinct之前。
本题后面的where是对前面已经完成计算后的条件筛选,如果这里将where子句跟窗口函数放在同一个层级,按照SQL的执行顺序,就应该是先进行where再进行窗口计算,这明显不是我们需要的逻辑。
174
group by一定要配合聚合函数使用嘛?
group by 就是分组统计的意思,一般情况都是配合聚合函数 如(count(),sum(),avg(),max(),min())一起使用。
- count() 数量
- sum() 总和
- avg() 平均
- max() 最大值
- min() 最小值
如果没有配合聚合函数使用可以吗?
我用的是 Mysql 5.7 ,是可以的。不会报错,并且返回的是,分组的第一行数据。