我有一个有趣的表,其中两个键合在一起构成每一行的主键。但是在一种边缘情况下,我想选择所有行(但仅约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)”,但这显然不起作用。
答案 0 :(得分:4)
也许DISTINCT ON
有帮助吗?这样会给出所有行,其中第一个出现的是不同的account_id
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
之后添加第二个键。