今天在做统计时为了吧名称转换,故使用了别名,但是group by 后的结果用了别名,结果确实出来了,却没有按别名的分组;
Group by不能用别名的原因,因为执行到groupby 时,还没执行到select中的别名,所以别名还没生效。所以别名只能放到比如order中,distinct中。遇到这种问题可以使用子查询替代;
SQL按照如下顺序执行查询:
-
FROM子句
-
WHERE子句
-
GROUP BY子句
-
HAVING子句
-
SELECT子句
-
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