【发布时间】: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 关键字,一切正常(除了它给了我错误的答案)。
【问题讨论】: