今天在做统计时为了吧名称转换,故使用了别名,但是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 后面跟上整个表达式