Postgresql select distinct

Postgresql select distinct,postgresql,distinct,Postgresql,Distinct,我在postgresql select上遇到了一个问题 此查询工作正常: 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, COLU

我在postgresql select上遇到了一个问题

此查询工作正常:

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的列

发生了什么事?

distinct不是一个函数。使用不同的a,b与 不同的a,b或不同的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
以上内容仅适用于博士后。如果您正在寻找基于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;
需要按某物排序来选择一个重复行。

distinct不是一个函数。使用不同的a,b与 不同的a,b或不同的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
以上内容仅适用于博士后。如果您正在寻找基于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;
需要按某物排序来选择一个重复行