Oracle COUNT(DISTINCT expr)导致ORA-00979错误

时间:2019-04-18 02:35:21

标签: oracle ora-00979

我有以下查询:

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)
   )

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

这似乎是一个非常简单的查询,但是我无法找到记录此问题的其他人(这可能意味着我做错了事)。

在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关键字,一切都会正常(除了它给我错误的答案)。

1 个答案:

答案 0 :(得分:1)

我没有您的样本数据和实际查询,所以无法确定为什么会提出ORA-00979。但是,就您发布的查询而言,问题出在您的PIVOT表达式中而已。

IN (a, b, c)

这会引发错误

  

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

这意味着IN的{​​{1}}子句中指定的值应为常量(字符串文字/数字等)

如果您使用

PIVOT

它工作得很好。

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