这个话题其实可以用于扩大为各个sql语法的不同之处。本文clickhouse版本:20.7.2.30
--mysql
select
id ,name
from test.person
group by id;
msyql可以有上面的语法,hive sql却不行,hive的sql语法和mysql有不同之处众所周知,比如有group by 语法存在的时候,hive要求select后面的非聚合字段必须是group by后面的分组字段,这个其实很好理解,我们也接受了,因为严格来说确实是这样,对于同一个组的非分组字段会有不一样的数据,如果你也查询出来你算哪一个呢?并且如果你真的想随便查出来一个,hive里面可以用first() 函数。
--hive
select
id ,first(name) name
from test.person
group by id;
还有一些比如说hive不支持in 语法(老版本是这样,新版本没去细究),所以我们习惯用join解决,这些都没问题,但总的来说我们对sql的执行顺序的理解大致是一致的,如下:
from -> join -> where ->group by -> select ->having ->order by -> limit
然而最近clickhouse的使用让我发现clickhouse里面sql执行顺序似乎并非如此,比如 mysql 或者hive我们执行一下语句:



