【问题标题】:Postgresql select distinctPostgresql 选择不同的
【发布时间】:2015-03-04 14:10:30
【问题描述】:

我在 postgresql 选择上遇到问题。

这个查询工作正常:

SELECT
    DISTINCT(COLUMN_A || ' - ' || COLUMN_B),
    COLUMN_A,
    COLUMN_B
FROM
    TABLE_A

但是,当我在 select 上包含一个新的 colmun 时:

SELECT
    DISTINCT(COLUMN_A || ' - ' || COLUMN_B),
    COLUMN_A,
    COLUMN_B,
    COLUMN_C
FROM
    TABLE_A

结果的数量增加了,带有 DISTINCT 的列在结果集上重复了。

发生了什么事?

【问题讨论】:

    标签: postgresql distinct


    【解决方案1】:

    distinct 不是一个函数。使用distinct (a), bdistinct a, bdistinct a, (b)。您只需将列放在括号之间(这不是一个好主意,因为这会在 Postgres 中创建匿名记录)。

    在 Postgres 中,您可以将 distinct on () 用于您想要做的事情(至少我认为这是您想要做的事情):

    SELECT distinct on (column_a, column_b) 
           COLUMN_A || ' - ' || COLUMN_B, 
           COLUMN_A,
           COLUMN_B
    FROM TABLE_A
    order by column_a, column_b
    

    以上内容仅适用于 Postgres。如果您正在寻找基于 SQL 标准的可移植版本,您可以为此使用窗口函数:

    select column_a, column_b, column_c
    from (
       select column_a, column_b, column_c, 
              row_number() over (partition by column_a, column_b order by something) as rn
       from table_a
    ) t
    where rn = 1;
    

    需要order by something 才能选择重复行之一。

    【讨论】:

      猜你喜欢
      • 2014-12-19
      • 2013-03-10
      • 2012-11-22
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 2014-05-13
      相关资源
      最近更新 更多