Oracle计数(不同的expr)导致ORA-00979错误

Oracle计数(不同的expr)导致ORA-00979错误,oracle,ora-00979,Oracle,Ora 00979,我有以下疑问: SELECT t.f1 , COUNT(DISTINCT t.f2) AS distinct_count FROM some_table t GROUP BY t.f1 这很好用。 然而,如果我尝试这样做,它会给我一个ORA-00979,而不是一个groupby表达式错误 WITH my_aggregate_data AS ( SELECT t.f1 , COUNT(DISTINCT t.f2) AS distinct_co

我有以下疑问:

SELECT
   t.f1
   , COUNT(DISTINCT t.f2) AS distinct_count
FROM
   some_table t
GROUP BY
   t.f1
这很好用。 然而,如果我尝试这样做,它会给我一个
ORA-00979,而不是一个groupby表达式
错误

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
关键字,它可以正常工作(除了计数是一个总计数而不是一个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
关键字,一切都会正常工作(除了它给了我错误的答案)。

我没有您的示例数据和实际查询,因此无法确定为什么会提出ORA-00979。但是,就您发布的查询而言,问题出在您的
PIVOT
表达式中,其他什么都没有

IN (a, b, c)
这就抛出了错误

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

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

如果你使用

IN ('a', 'b', 'c') 
它工作得非常好

请查看此项以查看错误消息和工作查询