假设我有一个包含a、B、C和D列的表。我想要的是
- 得到原始表中存在的A和B的所有不同组合
- 对于每个这样的组合,我想要提取一个具有该组合的SINGLE行,另外我还想要它的C和D值
- 可能会有多行具有A和B的特定组合。在这种情况下,我仍然只想要一行,它应该是C列中值最高的一行
例如,如果在我的原始表中,A=男性或女性,B=高或矮,C=年龄,而D是其他值,那么我希望最终得到一个有4行的表,每行都有以下组合之一:
Male, Tall, …, …
Female Tall, …, ...
Male Short, …, ...
Female Short, …, …
其中每一行应该属于年龄最大的人,然后也属于他们各自的D值。
Gordon的回答是错误的。使用此:
select a, b, c, d
from (select t.*,
row_number() over (partition by a, b order by c) as seqnum
from t
) t
where seqnum = 1;
如果您试图按列A和B分组,并获得列C和D的max、sum、avg或任何其他函数值,则简单的逐子句可能会起作用,例如;
select a, b, max(c), max(d)
from table
group by a,b
您可以使用row_number()
:
select a, b, c, d
from (select t.*,
row_number() over (partition by a, b order by c desc) as seqnum
from t
) t
where seqnum = 1;