如何从每个组sql获取1行

时间:2013-06-17 19:41:45

标签: sql oracle

我当前从表中查询的内容是给我这样的

C1 | C2 | C3 | C4
xx | cc | ff | i1
xx | dd | kk | i2
yy | oo | tt | i3
zz | uu | ll | i4
zz | jj | ee | i5

所有'我是整数

我按C1,C2,C3进行分组

我想对每个与最高C4值相对应的不同C1值只获得一行

最好的办法是什么?

2 个答案:

答案 0 :(得分:3)

为此,您需要分析功能。函数row_number()执行您想要的操作:

select c1, c2, c3, c4
from (select t.*, row_number() over (partition by c1 order by c4 desc) as seqnum
      from t
     ) t
where seqnum = 1

答案 1 :(得分:0)

与共同相关的子问题非常简单:

select C1,C2,C3,C4 from table tb where c4 in 
(select max(C4) from table where C1=tb.C1 )

编辑:

康拉德评论后,对于以下数据集:

c1      c2      c3      c4
 1      2        3       4
 1      3        4       4

此查询将返回两行。

我仍然不确定是否需要,对我来说,看起来我们应该为这些数据返回2行,因为我们无法区分两行,并且两行都满足要求。

这就像我们想知道学生在哪个科目中获得最高分。如果他在数学和英语中都得到92,我们应该返回两行。