SELECT:按函数结果分组

SELECT: Group by function result

我有一个计算实体状态的存储函数(这个状态不是实体的属性,但需要计算)。
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 语句中的存储函数的情况下执行此操作?

您可以将查询包装在外部查询中以隔离函数调用并使用别名:

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