【问题标题】:Using Aggregate function in select statement在 select 语句中使用聚合函数
【发布时间】:2020-06-29 04:53:48
【问题描述】:

有没有一种方法可以在 CASE 语句中使用聚合函数作为同一个 select 的一部分? 当我运行下面的查询时,我收到以下错误 ORA-00937: not a single-group group function 00937. 00000 - “不是单组群功能”。

    SELECT 
    A.id id,
    SUM(B.quantity) quantity ,
   MAX(CASE WHEN nvl(A.threshold,0) > SUM(B.quantity) THEN 'T' ELSE 'F' END )  late 
  FROM 
    TableB B ,
    TableA A 
     WHERE B.Type in ('ATYPE,'BTYPE') AND  A.nKey = B.id 
     GROUP BY 
    A.id

表 B

id  quantity  Type
9      10   Type A
9      11   Type B
10     5     Type A

表 A

id  nkey   threshold
1      9    15
2      10   10

结果

id  quantity  late
1      21   F
2      5    T

【问题讨论】:

    标签: oracle


    【解决方案1】:

    您只需要对阈值使用聚合函数或在分组列表中添加阈值:

    nvl(A.threshold,0) 替换为min(nvl(A.threshold,0))

    使用以下GROUP BY

    group by a.id, a.threshold
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2014-04-05
      相关资源
      最近更新 更多