我想从表中选择两列(A& B)并仅保留其中一列(A)的不同值。但是,A的单个值可以映射到B的多个值。因此,以下查询将无效
select distinct A, B from table1
我在考虑这样的事情:
select A, agg(B) from table1 group by A
我希望agg
函数在分组A时随机从B中选择一个值。如何在Postgres中执行此操作?
答案 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;