PostgreSQL:在具有相同列的行中的一列中选择具有最小值的行

时间:2017-09-08 08:41:58

标签: sql postgresql greatest-n-per-group

倾斜的描述可能不是我想要的。这是一个例子。给出一个表t1:

src dest length path
 a    e    5    a b e
 a    d    2    a c d
 a    g    6    a c g
 a    e    3    a c e
 a    e    4    a g e
 a    d    2    a b d

对于每个(src,dest)对,如果只有一个条目,则保留它;如果有多个条目,请选择具有最小长度的条目,如果它们的长度相同,则保留所有条目。 输出应为:

src dest length path
 a   d     2    a c d
 a   g     6    a c g
 a   e     3    a c e
 a   d     2    a b d

如何使用PostgreSQL处理它?<​​/ p>

2 个答案:

答案 0 :(得分:2)

我会使用窗口函数:

select t.*
from (select t.*,
             dense_rank() over (partition by src, dest order by length) as seqnum
      from t
     ) t
where seqnum = 1;

答案 1 :(得分:0)

我不认为你可以在没有扫描表两次的情况下制作它:

ClickGuard.guard(mPlayButton);