代码之家  ›  专栏  ›  技术社区  ›  ddd

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

  •  0
  • ddd  · 技术社区  · 8 年前

    我想从表中选择两列(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 回复  |  直到 8 年前
        1
  •  3
  •   Gordon Linoff    8 年前

    如果你想要一个 任意的 价值(“任何旧价值”),然后 min() max() 是任意值:

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

    如果你想要一个 不确定 value(“来自任何匹配行的值”),然后:

    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 可能是你想要的。

        2
  •  2
  •   Barbaros Özhan    8 年前

    使用 string_agg 逗号:

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