SQL Server,包括不在group by语句中的列

时间:2017-01-12 10:04:32

标签: sql sql-server

我有永久性问题,
假设我有以下列:

T:A(PK), B, C, D, E

现在,

select A, MAX(B) from T group BY A

不,我不能这样做:

select A, C, MAX(B) from T group BY A

我不明白为什么 - 当我来到AVGSUM时,我明白了。但是,MAXMIN恰好来自一行。

如何处理?

4 个答案:

答案 0 :(得分:1)

您可以像这样使用ROW_NUMBER()

select A, C, B
from (
    select *
        , row_number() over (partition by A order by B desc) seq
        --                       group by ^      max(^)
    from yourTable ) t
where seq = 1;

答案 1 :(得分:0)

这是因为选择列表中包含的列也应该是group by子句的一部分。您可能有一个列重新分组但不在选择列表中的列,但反之亦然。

通常,只将那些列放在要进行分组的select子句中。

答案 2 :(得分:0)

试试这个。它可以帮助您只通过1列(f1)找到MAX,还可以添加您想要的列(f3)但不会影响MAX操作

SELECT m.f1,s.f2,m.maxf3 FROM
(SELECT f1,max(f3) maxf3 FROM t1 GROUP BY f1) m
CROSS APPLY (SELECT TOP(1) f2,f1 FROM t1 WHERE m.f1 = f1) s 

答案 3 :(得分:0)

你的问题不是很明确,因为我们不确定你要做什么。

假设您实际上并不想在主查询中执行分组,但想要根据A列返回B的最大值,则可以这样做。

select A, C,(Select Max(B) from T as T2 WHERE T.A = T2.A) as MaxB from T