【问题标题】:How to use Group By in a Nested Aggregate Case Statement?如何在嵌套聚合案例语句中使用 Group By?
【发布时间】:2021-07-21 02:52:32
【问题描述】:

我正在尝试编写一个显示 ID 列和自定义计算的查询。

Select c.ID,
       CASE
       WHEN m.TYPE='Category 1'
       THEN ROUND((COUNT(c.ID)-sum(m.TICKETS))/COUNT(C.ID),2)
       END Custom_Calc
from   Master_Data M
       inner join Collection_Data C
       on M.CASE__C=C.ID 
group by
       c.ID

当我运行这个查询时,它会产生一个错误

ORA-00979: 不是 GROUP BY 表达式

我知道我需要在group by 子句中包含m.Type,但我不想看到该级别的数据。它为每个ID 生成两行。理想情况下,我只想要每个ID 一行。我也尝试过OVER (PARTITION BY ()) 子句,但它总是要求我按我不想要的类型对结果进行分组。这对计算很重要。

有人可以帮我解决这个问题吗?非常感谢。

【问题讨论】:

  • 把它翻过来; count(case when ...).
  • 如果我把它变成 SUM(Case WHEN..) 那么我仍然得到 ORA-00937: not a single-group group function 错误

标签: sql oracle aggregate-functions


【解决方案1】:

您可以尝试将CASE 表达式移动到聚合函数中。

目前尚不清楚您尝试将 m.TYPE='Category 1' 过滤器应用于哪些聚合函数,因此我假设您正在尝试过滤所有聚合:

Select c.ID,
       ROUND(
         (
           COUNT(CASE WHEN m.TYPE='Category 1' THEN c.ID END)
           - SUM(CASE WHEN m.TYPE='Category 1' THEN m.TICKETS END)
         ) / COUNT(CASE WHEN m.TYPE='Category 1' THEN c.ID END),
         2
       ) AS Custom_Calc
from   Master_Data M
       inner join Collection_Data C
       on M.CASE__C=C.ID 
group by
       c.ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2020-12-13
    相关资源
    最近更新 更多