如何选择多个列,但仅显示唯一/非重复的结果(基于一个特定的列)?

时间:2018-11-02 13:30:08

标签: sql postgresql

我有一个有趣的表,其中两个键合在一起构成每一行的主键。但是在一种边缘情况下,我想选择所有行(但仅约4列),但结果中没有特定列的任何重复项。

因此,例如,如果我有一个包含“ account_id,company_id,键,is_customer,favourite_veg”列的表,则将有很多重复的“ account_id”,因为它们与“ company_id”一起构成了主键。 / p>

但是,如果我只想要所有account_id的列表,而又保留其他行怎么办?令人困惑的是,在此示例中,其他行在不同公司ID之间是静态的,因此不存在未包含信息的潜在风险。

在我看来,这类似于“从客户那里选择DISTINCT(account_id)列(account_id,键,is_customer,favourite_veg)”,但这显然不起作用。

2 个答案:

答案 0 :(得分:4)

也许DISTINCT ON有帮助吗?这样会给出所有行,其中第一个出现的是不同的account_id

demo: db<>fiddle

SELECT DISTINCT ON (account_id) 
    account_id, 
    key, 
    is_customer, 
    favorite_veg
FROM customers

答案 1 :(得分:1)

这是您想要的吗?

SELECT DISTINCT account_id, key, is_customer, favorite_veg
FROM customers;

DISTINCT适用于整个行。根据您的描述,这可能就足够了。

如果没有,Postgres提供扩展名DISTINCT ON,该扩展名与ORDER BY子句一起使用:

SELECT DISTINCT ON (account_id) account_id, key, is_customer, favorite_veg
FROM customers
ORDER BY account_id;

以这种方式使用时,它保证结果集每account_id有一行。

如果要为返回的行指定最早的,最新的或最大的或其他名称,则可以在account_id中的ORDER BY之后添加第二个键。