【问题标题】:Oracle COUNT(DISTINCT expr) causes ORA-00979 errorOracle COUNT(DISTINCT expr) 导致 ORA-00979 错误
【发布时间】:2019-09-08 08:07:19
【问题描述】:

我有以下疑问:

SELECT
   t.f1
   , COUNT(DISTINCT t.f2) AS distinct_count
FROM
   some_table t
GROUP BY
   t.f1

效果很好。 但是,如果我尝试这样做,它会给我一个 ORA-00979 not a GROUP BY expression 错误。

WITH my_aggregate_data AS
(
   SELECT
      t.f1
      , COUNT(DISTINCT t.f2) AS distinct_count
   FROM
      some_table t
   GROUP BY
      t.f1
)

SELECT
   *
FROM
   ( SELECT f1, distinct_count FROM my_aggregate_data )
PIVOT
   (
      SUM(distinct_count)
      FOR f1
      IN (a, b, c)
   )

如果我只是从COUNT 方法中删除DISTINCT 关键字,它就可以正常工作(除了计数是总计数而不是不同计数)。

这似乎是一个相当直接的查询,但我无法找到记录此问题的任何其他人(这可能意味着我做错了什么)。

我在 Oracle 文档中也没有发现任何东西表明 COUNT(DISTINCT exp) 的行为与 COUNT(exp) 的行为不同,除了两者之间的明显区别。

我也是这样写的

SELECT
   *
FROM
   (
      SELECT
         t.f1
         , COUNT(DISTINCT t.f2) AS distinct_count
      FROM
         some_table t
      GROUP BY
         t.f1
   )
PIVOT
   (
      SUM(distinct_count)
      FOR f1
      IN (a, b, c)
   )

但它只会导致相同的 ORA-00979 错误,并且再次,如果您删除 DISTINCT 关键字,一切正常(除了它给了我错误的答案)。

【问题讨论】:

    标签: oracle ora-00979


    【解决方案1】:

    我没有您的示例数据和实际查询,因此无法确定引发 ORA-00979 的原因。但是,就您发布的查询而言,问题出在您的 PIVOT 表达式中,仅此而已。

    IN (a, b, c)
    

    这会引发错误

    ORA-56901:pivot|unpivot 不允许使用非常量表达式 价值观

    这意味着在PIVOTIN 子句中指定的值应该是常量(字符串文字/数字等)

    如果你使用

    IN ('a', 'b', 'c') 
    

    效果很好。

    查看此DEMO 以查看错误消息和有效查询。

    【讨论】:

      猜你喜欢
      • 2014-03-24
      • 1970-01-01
      • 2014-12-24
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多