我尝试运行以下查询:
select a,b,min(c) from tablename where e=1 and f=1 group by a,b order by a,b,c
但得到了错误:
Column name 'tablename.c' is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
但是c包含在聚合函数min()中,那么这里的问题是什么?有解决方法吗?
这是在sqlserver 2000上(使用sqlserver 2008管理控制台)。
答案 0 :(得分:3)
当您在该列上使用聚合时,不再是c
而是“聚合c”,这就是您不能在order by子句中使用它的原因。
您需要将该列别名为
按顺序使用它select a,b,min(c) as min_c from tablename where e=1 and f=1 group by a,b order by a,b,min_c
编辑:
为什么列c不可用?
在语句中我们使用子句group by,我们的原始表格转换为新的临时表格。
在您使用a和b列进行分组的情况下,这些列中的数据不会仅限于唯一更改。
在c
列上,您正在使用一个函数,对于每个唯一的组,它将检索c的最低值,为此,必须创建一个新列来存储该结果。
order by子句是通过select部分执行的查询的最后一部分。所以临时表的结果不是源表的结果。
语句执行的简单顺序如下:
FORM
JOIN
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
答案 1 :(得分:0)
试试这个
select * from
(
select a,b,min(c) as c from tablename where e=1 and f=1 group by a,b
) d order by a,b,c
答案 2 :(得分:0)
试试这个:
select a,b,min(c)
from tablename
where e=1 and f=1
group by a,b
order by a,b,min(c)
或者这个:
select a,b,min(c)
from tablename
where e=1 and f=1
group by a,b
order by 1,2,3