【问题标题】:How do I SELECT multiple columns, but only show the results that are unique/non-duplicates (based on one specific column)?如何选择多个列,但仅显示唯一/非重复的结果(基于一个特定列)?
【发布时间】:2018-11-02 13:30:08
【问题描述】:

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

例如,如果我有一个包含“account_id、company_id、key、is_customer、favourite_veg”列的表,将会有很多重复的“account_id”,因为它们与“company_id”一起形成主键。

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

在我的脑海中,它类似于“SELECT DISTINCT(account_id) COLUMNS (account_id, key, is_customer, favorite_veg) FROM customers”,但这显然行不通。

【问题讨论】:

  • 如果DISTINCT ON 不能解决您的问题,请添加一些示例数据和预期输出。你的问题似乎不是很复杂。

标签: sql postgresql


【解决方案1】:

也许DISTINCT ON 有帮助?这会给出第一次出现不同 account_id 的所有行

demo: db<>fiddle

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

【讨论】:

    【解决方案2】:

    这是你想要的吗?

    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 一行的结果集。

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

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2012-01-06
      相关资源
      最近更新 更多