sql运算顺序及其运算模型
sql的运算顺序
from t1 准备起始数据
join t2 拼接另一份数据,按某个拼接on条件
where x>10 对数据过滤:按行过滤
group by y 对数据分组
having sum(x)>10 对数据过滤:按分组进行过滤
select 计算表达式
order by 对结果排序
limit 限制输出的结果行数
sql的**运算模型**:
1. 逐行运算: 特点是,每个表达式利用每一行的数据计算一次,得到一个结果数据;
结果的行数,与被查询表的行数一致! 结果列数,与select后的表达式个数一致!
表达式在计算时,只能看到当前行的数据;
2.分组聚合运算:
特点是: 每个表达式利用一组数据计算一次,得到一个结果;
结果的行数,与数据的分组数一致!结果的列数,与select后的表达式个数一致! select max(age),sum(salary) from t group by city;
表达式在计算时,可以看见当前整个组的数据;
3.窗口分析运算:-- sum() over()
先将数据分成若干个窗口,并对数据在窗口中排序,并可指定计算时能够看到的数据的范围
over(partition by xxx order by yyy desc rows between 3 preceding and 4 following ) 将来计算时,可以看到当前行的前3行到后4行
over(partition by xxx order by yyy desc rows between 3 preceding and current row ) 将来计算时,可以看到当前行的前3行到当前行
over(partition by xxx order by yyy desc rows between current row and 2 following ) 将来计算时,可以看到当前行的后2行及当前行
over(partition by xxx order by yyy desc rows between unbounded preceding and unbounded following ) 将来计算时,可以看到整个窗口
然后计算函数,比如sum(salary)
计算时,会按照前面定义的窗口来计算,而且会对每一行算一次,得到一个结果
n PRECEDING : 前n行
n FOLLOWING:后n行
CURRENT ROW : 当前行