我有以下查询:
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
关键字,一切都会正常(除了它给我错误的答案)。
答案 0 :(得分:1)
我没有您的样本数据和实际查询,所以无法确定为什么会提出ORA-00979。但是,就您发布的查询而言,问题出在您的PIVOT
表达式中而已。
IN (a, b, c)
这会引发错误
ORA-56901:pivot | unpivot不允许使用非常数表达式 值
这意味着IN
的{{1}}子句中指定的值应为常量(字符串文字/数字等)
如果您使用
PIVOT
它工作得很好。
请查看此DEMO,以查看错误消息和有效的查询。