如何选择多列,同时保持其中一列不同

时间:2018-06-06 15:37:00

标签: sql postgresql

我想从表中选择两列(A& B)并仅保留其中一列(A)的不同值。但是,A的单个值可以映射到B的多个值。因此,以下查询将无效

select distinct A, B from table1

我在考虑这样的事情:

select A, agg(B) from table1 group by A

我希望agg函数在分组A时随机从B中选择一个值。如何在Postgres中执行此操作?

2 个答案:

答案 0 :(得分:3)

如果您想要任意值("任何旧值"),则min()max()是任意值:

select a, min(b) as b
from table1
group by a;

如果你想要一个不确定值("来自任何符合&#34的行的值;),那么:

select distinct on (a) a, b
from table1
order by a;

如果你想要一个随机值("来自从统一分布中选择的随机匹配行的值"),那么:

select distinct on (a) a, b
from table1
order by a, random();

换句话说,"随机"的定义不同于"任意"并且"不确定"。但是,distinct on可能就是您想要的。

答案 1 :(得分:2)

使用逗号代码string_agg

select A, string_agg(distinct B,',') from table1 group by A;