今天在做统计时为了吧名称转换,故使用了别名,但是group by 后的结果用了别名,结果确实出来了,却没有按别名的分组;

Group by不能用别名的原因,因为执行到groupby 时,还没执行到select中的别名,所以别名还没生效。所以别名只能放到比如order中,distinct中。遇到这种问题可以使用子查询替代;

SQL按照如下顺序执行查询:

  1. FROM子句
  2. WHERE子句
  3. GROUP BY子句
  4. HAVING子句
  5. SELECT子句
  6. ORDER BY子句

对于大多数关系数据库系统来说,这个顺序解释了哪些名称(列或别名)是有效的,因为它们必须在前面的步骤中引入。

因此,在Oracle和SQL Server中,不能在SELECT子句中定义的GROUP BY子句中使用一个术语,因为GROUP BY是在SELECT子句之前执行的。

测试了几次后发现,mysql 中仍然也是不能识别别名,因此还是要在group by 后面跟上整个表达式

2、在oracle中: 1)where/ group by/having子句中只能直接使用栏位或者常量,而不能使用栏位的 别名 ,除非这个 别名 来自子查询之中,如:select .... from (select col1 ccc from table) where ccc > 1  同事工作中遇到一个 问题 :select count(billingdate),to_char(billingdate,'YYYYmm') monthfrom tu_tradewhereto_char(billingdate,'YYYY') ='2017'and reportstat = 30 group by month;-----执行报错,can't resolve month........... 由于where和 group by的执行顺序都在select之前,所以select的 别名 不可以跟在其之后,order by的执行顺序在select之后,所以order by后可以跟select的 别名 。两者的区别在于:hivesql中 group by后不可跟 别名 ,而 mysql group by后可以跟 别名 ;2. group by和partition by后不可跟 别名 。1. order by后可以跟 别名 。1. order by后可以跟 别名 。2. group by后可以跟 别名 。3. where后不可跟 别名 MySQL 别名 简介:在本教程中,您将学习如何使用 MySQL 别名 来提高查询的可读性。 MySQL 支持两种 别名 ,称为列 别名 和表 别名 。让我们详细检查每种 别名 MySQL 别名 有时列的名称是不太好理解和记忆的,使得查询的输出很难理解。要为列提供描述性名称,请使用列 别名 。以下语句说明了如何使用列 别名 :SELECT[column_1 | expression] AS descriptive_nameFROM... MySQL 、Postgres 和 Hive里是允许把 别名 放在 GROUP BY之后的,运行顺序被优化成:from >> where >> select >> group by >> having >> select >> order by