SELECT: группировка по функции результат - PullRequest
0 голосов
/ 29 августа 2018

У меня есть сохраненная функция, которая вычисляет статус объекта (этот статус НЕ является атрибутом объекта, но его необходимо рассчитать).
В операторе SELECT я хочу знать, сколько элементов имеет какой статус.

На данный момент я получил следующее:

SELECT   my_function(entity_id) AS status,
         COUNT(*)
FROM     some_table
GROUP BY my_function(entity_id) -- entity_id is a column of some_table
ORDER BY status;

Это работает, но я нахожу довольно уродливым повторять вызов функции внутри оператора GROUP BY.
Приведенный выше код является лишь примером. Фактическая функция определена в пакете и имеет несколько входных параметров.

Можно ли сделать это без ссылки на хранимую функцию в выражении GROUP BY?

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете заключить запрос во внешний запрос, чтобы изолировать вызов функции и использовать псевдоним:

select count(*),
       status
from ( 
        select s.*,
               my_function(entity_id) as status
        from some_Table s
     )
group by status
order by status
...