我有永久性问题,
假设我有以下列:
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
我不明白为什么 - 当我来到AVG
或SUM
时,我明白了。但是,MAX
或MIN
恰好来自一行。
如何处理?
答案 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