Postgresql选择不同

时间:2015-03-04 14:10:31

标签: postgresql distinct

我在postgresql select上遇到问题。

此查询正常工作:

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

但是,当我在选择中添加一个新的colmun时:

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

结果数量增加,DISTINCT列在结果集上重复。

发生了什么事?

1 个答案:

答案 0 :(得分:5)

distinct NOT 是一个功能。使用distinct (a), b与...相同 distinct 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