【问题标题】:GroupBy only one field, not all the fields I have in SelectGroupBy 只有一个字段,不是我在 Select 中的所有字段
【发布时间】:2019-05-28 14:05:18
【问题描述】:

我正在处理下一张桌子:

**ID    Value   Data**
1   30  25/4
1   20  26/4
1   20  27/4
3   10  25/4
4   20  26/4
5   30  26/4

我需要查询表并得到下一个结果:

**ID    Value   Data**
1   70  "Any value, can be 25/4, 26/4 or 27/4"
3   10  25/4
4   20  26/4
5   30  26/4

我尝试使用 GroupBy 进行查询,但如果添加所有字段(ID、值和数据),结果将返回第一个表。而且,如果我只有 GroupBy 字段 ID,我会遇到下一个错误:

ORA-00979: 不是 GROUP BY 表达式

任何人都可以帮助如何做到这一点?

【问题讨论】:

    标签: sql oracle aggregate-functions


    【解决方案1】:

    我们可以在每个ID 组中任意取最小Data 值:

    SELECT ID, SUM(Value) AS Value, MIN(Data) AS Data
    FROM yourTable
    GROUP BY ID;
    

    【讨论】:

      【解决方案2】:

      只需使用min()max()

      select id, sum(value), min(data)
      from t
      group by id;
      

      如果你真的想要一个随机值,你可以使用:

      select id, sum(value),
             min(data) keep (dense_rank first order by dbms_random.random)
      from t
      group by id;
      

      【讨论】:

      • 谢谢。如果我有一些空 ID,则查询会对这些值求和。我怎样才能避免这种情况?
      • @RenéFontan 。 . .您可以添加where id is not null
      • Gordon,我想显示空 ID,但我不想将它们相加。
      • @RenéFontan 。 . .如果sum(case when id is not null then value end) 没有回答问题,您应该提出一个新的问题,并提供适当的样本数据和所需的结果。
      • 好的,在这里打开一个新问题stackoverflow.com/questions/56345735/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2020-11-03
      • 2012-01-25
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多