sql - 带有 group by 子句的多个聚合函数

标签 sql count group-by

我有以下

WorkflowID  FK_UA                DateApprobation
----------- -------------------- -----------------------
1           3                    NULL
2           1                    NULL
3           1                    NULL
4           2                    2013-05-31 09:22:33.000

我想要做的是获得一堆聚合字段。

我想获得批准的工作流、非批准的工作流、所有工作流

我知道的方式是“DateApprobation”字段是否为空或具有值。

问题是,我希望能够通过“FK_UA”对其进行分组,所以我不知道如何使用 group by 子句来拥有 3 个聚合函数 (COUNT)。

我正在寻找可以实现这一目标的查询,我尝试了几个类似的案例,但它返回了一些奇怪的值。

我试过这个:
SELECT
    FK_UA
,COUNT(WorkflowID) AS TOTAL
,COUNT(CASE when DateApprobation is not null then 1 else 0 end) AS APPROVED
,COUNT(CASE when DateApprobation is null then 1 else 0 end) AS NOT_APPROVED   
FROM Workflow        
GROUP BY
FK_UA

但它总是为所有 3 个值返回相同的东西!

最佳答案

SELECT
    SUM(CASE WHEN [DateApprobation] IS NOT NULL THEN 1 ELSE 0 END) as [Approbated count],
    SUM(CASE WHEN [DateApprobation] IS NULL THEN 1 ELSE 0 END) as [Non-Approbated count],
    COUNT(*) as [Total]
FROM YourTable
GROUP BY FK_UA 

如果我猜对了你......

关于sql - 带有 group by 子句的多个聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16859016/

相关文章:

mysql - 元旦12-2按月选择记录

sql - 如何找到始终包含确切数量的字符类型的子字符串?

php - 我的 SELECT COUNT 查询返回一个数组而不是整数

mysql - 使用 mysql 查询计算 "trash bin"中的所有项目

mysql - 只选择多次出现的一个条目

mysql - 分组依据 - 返回零计数

sql - 如何选择早于特定日期的行?

sql - 如何从 sql 语句或存储过程连接到外部数据库?

mysql - 如何计算每个类别的项目?

sql - Postgresql 创建 View