SELECT
department_id
FROM
employees
GROUP BY
department_id
ORDER BY
AVG(salary);
问题描述 :
这段sql代码为啥我这执行没问题,返回的数据也是对的..
今天突然发现可以这样,这个是怎么回事?
疑惑:
根据sql执行顺序,order by应该在group by之后的,按说不能使用组函数,以前也一直都是分组后,select列表使用组函数,之后才在order by中使用select中组函数列进行排序。
就像这样:
SELECT
department_id,
AVG(salary) AS ag
FROM
employees
GROUP BY
department_id
ORDER BY
ag;
然而问题开头的那段sql代码,分组后生成的临时表是没有salary字段的,而且也已经分过组了,order by使用聚合函数应该报错才对,但反而聚合函数执行成功了,返回的数据也是avg(salary)
函数执行成功,然后对该列排序后的数据。