为什么在SQL语句的GROUP BY里面不可以使用别名
2016-04-16 21:15
246 查看
如下的SQL语句:
SELECT SUM(num),CASE type WHEN 1 THEN '类别1' ELSE '类别2' END AS utype FROM USER GROUP BY utype;
执行时会报invalid identifi的错误,这是因为在SQL执行的时候,WHERE和GROUP语句在字段分类之前就已经执行了,在此期间,别名还没有生效,因此找不到指定别名的字段,报错。
解决办法,将语句改为:
SELECT SUM(num),BIEMING.utype FROM USER,(SELECT ID,CASE type WHEN 1 THEN '类别1' ELSE '类别2' END AS utype FROM USER) BIEMING EHERE BIEMING.ID=USER.ID GROUP BY BIEMING.utype;
就是使用一个子查询将别名字段单独拿出来,然后再汇总。
SELECT SUM(num),CASE type WHEN 1 THEN '类别1' ELSE '类别2' END AS utype FROM USER GROUP BY utype;
执行时会报invalid identifi的错误,这是因为在SQL执行的时候,WHERE和GROUP语句在字段分类之前就已经执行了,在此期间,别名还没有生效,因此找不到指定别名的字段,报错。
解决办法,将语句改为:
SELECT SUM(num),BIEMING.utype FROM USER,(SELECT ID,CASE type WHEN 1 THEN '类别1' ELSE '类别2' END AS utype FROM USER) BIEMING EHERE BIEMING.ID=USER.ID GROUP BY BIEMING.utype;
就是使用一个子查询将别名字段单独拿出来,然后再汇总。
相关文章推荐
- MySQL查询空字段或非空字段(is null和not null)
- SQL存储过程分配宿舍实例
- Mysql忘记密码,成功找回的经过!
- SQL存储过程登陆实例
- SQL对表的基本操作
- MySQL 数据库常用命令小结
- Oracle数据库--实用操作(6)触发器
- MySQL主从配置
- 如何应对数据库更换(三层架构+抽象工厂+反射+配置文件)
- linux下的Redis+spring+struts2实现点赞功能(八)
- mysql 索引
- Oracle报错,ORA-28001: 口令已经失效 解决方法
- Oracle报错,ORA-28001: 口令已经失效 解决方法
- Windows安装MySQL5.7
- 优化MD5和IP在(MySQL)数据库中的存储
- 数据库 - E-R模型设计
- MySQL
- linux下安装redis
- Oracle学习笔记(十八)——维护数据的完整性
- 数据库文件配置和数据库连接池的使用