Hive之别名使用规则和count问题
一、在mysql中
group by中可以使用别名;where中不能使用别名;order by中可以使用别名。
二、在hive中:
1)where/group by/having子句中只能直接使用栏位或者常量,而不能使用栏位的别名,除非这个别名来自子查询之中,如:select .... from (select col1 ccc from table) where ccc > 1;
2)而order by 则可以直接使用别名,如select col1 ccc from table order by ccc;
-
这和sql 的执行顺序是有关的:from获取数据 -> join on ->where执行 -> 如果有group by,接着执行group by -> select中的函数计算、别名指定再运行-> having ->order by ->limit
-
因此,字段、表达式的别名在where子句和group by子句都是不能使用的,而在order by中不仅可以使用别名,甚至可以直接使用栏位的下标来进行排序,如:
order by 1 desc,2 asc
-
然而即使在同一个sql语句中,即使窗口函数不在子句中,存在窗口函数的话,即使窗口函数是最后执行的,其里面的order by后面却不能跟别名。