【问题标题】:How do I show distinct values from one column along with one of it's corresponding rows?如何显示一列中的不同值及其对应的行之一?
【发布时间】:2021-08-24 12:56:29
【问题描述】:

如何显示一列中的不同值,并在同一行中显示另一列中的一个值?这可能是最容易用示例输出来解释的,如下所示。

查询应该只返回与permission 列中不同值相同的行数,在本例中为两个。

如果permission 列具有select,则该行将在username 列中显示AliceBob。如果permission 列具有insert,则该行将在username 列中显示CarolAliceBobDavid

如果每次返回不同的usernames 也没关系。性能不是关键因素 - 每个表的行数将少于几十行。

users_and_permissions 表

username permission
Alice select
Bob select
Carol insert
Alice insert
Bob insert
David insert

输出#1

username permission
Alice select
Carol insert

输出#2

username permission
Bob select
Bob insert

输出#3

username permission
Bob select
David insert

输出#4

username permission
Alice select
David insert

编辑:我从原始帖子中删除了我的 SQL,因为它使用了两个表和一个带有 DISTINCT ON 子句的连接。

【问题讨论】:

  • 您尝试过使用 DISTINCT ON 吗? postgresql.org/docs/current/sql-select.html
  • @JuliusTuskenis 是的 - 该条款是我的问题的一部分。
  • 请在不使用 SQL 的情况下解释您如何到达每个输出的逻辑。 IE。解释为什么输出#2 包含 Bob/Bob 而输出#3 包含 Bob/David。就像明智的输出 #1 vs 输出 #4 Alice/Carol vs Alice/David。
  • @Belayer 好建议。我修改了(并简化了,希望如此!)我的问题。

标签: postgresql


【解决方案1】:

https://www.postgresql.org/docs/current/sql-select.html查看 DISTINCT 子句

SELECT 
  DISTINCT ON (permission)
  username,
  permission
FROM
  users_and_permissions
ORDER BY 
  permission;

如果您想控制显示的用户名 - 在语句末尾使用 ORDER BY

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多