【问题标题】:Confusion about SELECT DISTINCT in SQL对 SQL 中的 SELECT DISTINCT 感到困惑
【发布时间】:2013-09-13 18:23:29
【问题描述】:

当我只选择 COLUMN_1 时,我会在我的数据库中获得正确数量的 8 行,因为它不会给我重复的行以及我想要的内容

SELECT DISTINCT COLUMN_1
FROM TABLE
WHERE COLUMN_3=12;

但是当同时选择 COLUMN_1、COLUMN_2 时,它会在我的数据库中提供 53 行,这不是我想要的...

SELECT DISTINCT COLUMN_1,COLUMN_2
FROM TABLE
WHERE COLUMN_3=12;

我知道当我用distinct 选择两列时,它会给我两列组合的唯一值。 DISTINCT 应用于列的组合,而不仅仅是第一列。所以我的问题是如何同时选择COLUMN_1COLUMN_2 以便它们给我8 行并且没有重复????因为只要我添加COLUMN_2,它就会提供更多我应该拥有的行..

【问题讨论】:

  • 如果 Column2 是数字,您可以取 min 、 max 或 avg 的值,然后按 Column_1 分组,如果 Column_2 不是数字,那么您必须决定要选择和使用的值它在 where 子句中。
  • 谢谢 Sonam,我不知道。

标签: sql select distinct


【解决方案1】:

您必须为column_2 决定哪个值。

一个简单的方法是group by

SELECT COLUMN_1, min(COLUMN_2)
FROM TABLE
WHERE COLUMN_3=12
GROUP BY COLUMN_1;

【讨论】:

  • 您必须根据要查找的内容选择 MIN、MAX、AVG 等。如果您想要最后一条记录,您可以将其用作内部查询并将其连接回表,以便您可以根据定义的排序选择 TOP 1。
  • 非常感谢。我没有想到 MIN
【解决方案2】:

我对您的确切要求并不完全清楚,但这里一个不错的解决方案可能是使用某种聚合函数之王来防止重复,但仍会返回导致重复的列中的所有值,例如

以下数据,

COLUMN1 | COLUMN2
-----------------
a       | x
b       | x
c       | y
a       | z
b       | y
a       | y

将显示为,

COLUMN1 | COLUMN2
-----------------
a       | x,z,y
b       | x,y
c       | y

您没有指定您正在使用的数据库,但在 Oracle 中您可以使用 LISTAGG 函数,在您的情况下可能类似于以下内容:

SELECT COLUMN1,
       LISTAGG(COLUMN2, ',') WITHIN GROUP (ORDER BY COLUMN2) "COLUMN2_VALUES",
  FROM TABLE

如果您没有使用 Oracle,而且这听起来像是一个合适的解决方案,那么值得检查您选择的 RDBMS 是否提供类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2019-09-13
    • 2012-07-22
    • 2013-05-13
    • 2020-04-16
    相关资源
    最近更新 更多