SQL:如何通过另一列中的MAX和另一列序列中的DISTINCT提取一行



假设我有一个包含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;

相关内容

  • 没有找到相关文章

最新更新