【问题标题】:db2 select distinct rows, but select all columnsdb2 选择不同的行,但选择所有列
【发布时间】:2025-12-19 00:10:01
【问题描述】:

专家,我有一个包含多列的表。 col1, col2, col3, col4, col5, col6

我需要select distinct (col4),但我的输出中还需要所有其他列。

如果我运行这个 (select distinct(col4 ) from table1),那么我的输出只会得到 col4。

请问,如何在 db2 上进行操作?

谢谢

【问题讨论】:

  • 假设下表:create table T(c4 int,c5 int); insert into T(c4,c5) values (1,2), (1,3)。查询的输出是什么?
  • 我认为你必须修改你的问题。由于 col4 列上的每个不同值在其他列上可能具有不同的值,因此您希望为不同的值显示哪个值?前任。如果您有两列和 4 条这样的记录:1-A、1-B、2-C、3-D,并且您想为第一列显示不同的值,您将只得到 1 和 2,但您是哪个值?想看这个栏目下的内容吗?因为值 1 有 A 或 B,而值 2 有 C 和 D。

标签: sql db2


【解决方案1】:

你只需这样做......

Select * From Table1 Where col4 In (Select Distinct(col4) From Table1)

【讨论】:

    【解决方案2】:

    我不确定你是否能够做到这一点。

    您可以尝试在此列上运行 group by。您将能够在其他列上运行一些聚合函数。

    select count(col1), col4 from table1 group by (col4);
    

    【讨论】:

      【解决方案3】:

      没有一个答案对我有用,所以这是我正在工作的一个。在 col4 上使用 group by,同时获取其他列的最大值

      select max(col1) as col1,max(col2) as col2,max(col3) as col3
        , col4
        from 
          table1
        group by col4
      

      【讨论】:

      • 嗯,你确定这就是你想要的吗?非col4 列的值可能来自不同的行。通常情况下,人们想要某种形式的greatest-n-per-group 结果。
      【解决方案4】:

      至少在DB2中可以执行

      SELECT
        DISTINCT *
      FROM
      <YOUR TABLE>
      

      这将为您提供(在本例中)6 列的每个不同组合。

      否则,您必须指定要包含的列。如果这样做,您可以使用select distinctgroup by

      【讨论】:

        最近更新 更多