优先级从高到低依次是:
1.from
2.Lateral View (炸裂函数)
3.ON (连接条件)
4.join
5.where
6.group by
7.AGG_FUNC聚合函数
计算 max 等聚合函数。SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。常用的 Aggregate 函数包涵以下几种:
- AVG:返回平均值
- COUNT:返回行数
- FIRST:返回第一个记录的值
- LAST:返回最后一个记录的值
- MAX: 返回最大值
- MIN:返回最小值
- SUM: 返回总和
8.having
注意:在标准 SQL 中,HAVING 子句允许引用 SELECT 子句中的列别名。这意味着你可以在 HAVING 子句中直接使用 SELECT 子句中定义的列别名,而不需要重复计算相同的聚合函数。
SELECT
sku_id,
sum(sku_num) order_num
from
order_detail
where
year (create_date) = year ("2022-01-10") -1
GROUP BY
sku_id
HAVING
order_num < 100
补充:虽然在执行顺序上是先执行HAVING再执行select,但“HAVING 子句允许引用 SELECT 子句中的列别名”导致可以在HAVING里先用’order_num‘,然后在select里第一次定义order_num,减少了一次聚合,优化了计算
9.over()开窗函数
row_number() 是没有重复值的排序——1、2、3
dense_rank() 是连续排序,两个第一名后面是第二名——1、1、2
rank() 是跳跃排序,两个第一名后面就是第三名——1、1、3
10.select
11.distinct
12.order by
13.limit
14.union all(特殊情况:在clickhouse数据库中,union all的优先级高于order by和limit)
熟知SQL的执行顺序才能明白SQL的逻辑,否则一开始就从select开始解读的话会对SQL逻辑的理解造成很大的困扰