【问题标题】:SQLite/Postgres SQL Query Distinct columnSQLite/Postgres SQL Query Distinct 列
【发布时间】:2013-02-08 07:52:45
【问题描述】:

我已经处理这个问题已经有一段时间了,我无法解决这个问题。是这样的,我的表格有case_no(字母数字)、first_namelast_namedescription

我想要做的是为每个不同的 first_name/last_name 组合只选择一行。所以,例如

     case_no         |         first_name         |         last_name
---------------------+----------------------------+------------------------
     AAAAAAA         |          john              |          doe
     BBBBBBB         |          Dog               |          dawg
     CCCCCCC         |          Cat               |          kitten
     DDDDDDD         |          john              |          doe

鉴于该示例,我想检索以下行:

     case_no         |         first_name         |         last_name
---------------------+----------------------------+------------------------
     BBBBBBB         |          Dog               |          dawg
     CCCCCCC         |          Cat               |          kitten
     DDDDDDD         |          john              |          doe

我该怎么做?

【问题讨论】:

  • 您要执行删除操作还是只想过滤结果集?
  • 不,我只想选择它们。我正在使用 java 来检索数据然后对其进行操作。

标签: sql sqlite postgresql


【解决方案1】:

试试这个,

SELECT MAX(CASE_NO), FIRST_NAME, LAST_NAME
FROM TABLE
GROUP BY FIRST_NAME, LAST_NAME;

【讨论】:

    【解决方案2】:

    在 PostgreSQL 中:

    SELECT DISTINCT ON (2, 3)
           case_no, first_name, last_name
    FROM   tbl
    ORDER  BY 2, 3, case_no DESC NULLS LAST;
    

    关于DISTINCT ON

    max()的版本区别:

    • 结果按first_name, last_name 排序。你可能想要也可能不想要。
    • 性能相似。如果您需要有序的结果,这可能会更快,否则max() 可能会更快。
    • 您可以轻松地从同一行添加更多列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 2012-09-07
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多