У меня следующий запрос:
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)
, кроме очевидного различия между ними.
Я также написал это такway
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
, все работает (за исключением того, что это дает мне неправильный ответ).