[转]为什么group by后面不能使用别名(除MySQL)
同事工作中遇到一个问题:
select count(billingdate),to_char(billingdate,'YYYYmm') month
from tu_trade
where to_char(billingdate,'YYYY') ='2017'and reportstat = 30
group by month;
-----执行报错,can't resolve month............
因为Sql语句执行顺序
(7) SELECT
(8) DISTINCT <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) HAVING <having_condition>
(9) ORDER BY <order_by_condition>
(10) LIMIT <limit_number>
Group by不能用别名的原因,因为执行到groupby(5)时,还没执行到select中的别名,所以别名还没生效。所以别名只能放到(7)之后,比如order中,distinct中。
遇到这种问题可以使用子查询替代
select month,count(month)
from
(selectcount(billingdate),to_char(billingdate,'YYYYmm') as month
from tu_trade
where to_char(billingdate,'YYYY') ='2017'and reportstat = 30) a
group by month;
注意:
在mysql中,group by中可以使用别名;where中不能使用别名;order by中可以使用别名。其余像oracle,hive中别名的使用都是严格遵循sql执行顺序的,groupby后面不能用别名。mysql特殊是因为mysql中对查询做了加强。
参考
相关文章
- MySQL open table
- Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
- 如何在MySql中记录SQL日志
- MySQL-获取某天的数据
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- [root@master mysql]# mysql -uroot -pjsb ERROR 2002 (HY000): Can't connect to local MySQL server thro
- <linux shell 攻略> 庖丁解牛 mysql数据库脚本管理系统
- MySQL--执行mysql脚本及其脚本编写
- MYsql 数据库密码忘记(Window)-2(mysql 5.7)
- 允许远程链接mysql,开放3306端口
- Linux下MySQL源码编译安装(eg:mysql-5.6.27.tar.gz )
- mysql索引_效率测试(包含测试sql脚本300万条数据),可用作教学案例。
- 【高可用MySQL解决方案】centos7配置mysql主从复制
- MySQL 可以用localhost 连接,但不能用IP连接的问题,局域网192.168.*.* 无法连接mysql
- mysql_22 _ MySQL有哪些“饮鸩止渴”提高性能的方法?
- Mysql原理篇之undo日志--下--12
- Mysql安装多台mysql
- entity framework mysql dev set