如何在 SQL 中显示所有已批准状态的总数?
Posted
技术标签:
【中文标题】如何在 SQL 中显示所有已批准状态的总数?【英文标题】:how to show total count of all approved status in SQL? 【发布时间】:2020-11-05 17:37:00 【问题描述】:我有这个数据,每个系统都有很多行。它还包括类型、状态和日期。 状态为完成、未完成、进行中、尚未开始。 我需要根据系统和日期计算这些行属于“B”类型的系统有多少,并且状态是 ALL APPROVED。
我试过了:
select system, date, count(line) from project_system
where type = 'B'
group by system, date
having min(status) = max(status) and min(status) = 'APPROVED'
通过上面的脚本,我仍然没有得到想要的结果。结果给我的系统状态已经全部批准,但总行数。它显示如下:
system date count
1 19-20-12 4
2 19-20-12 12
3 19-20-12 6
1 19-21-12 3
2 19-21-12 1
我希望看到类似的东西:
date count
19-20-12 3
19-21-12 2
我应该如何更改我的查询?
谢谢。
【问题讨论】:
欢迎来到 SO。请看:Why should I provide an MCRE for what seems to me to be a very simple SQL query? 因为你有GROUP BY system, date
,你会为每个system
得到一个单独的结果。
【参考方案1】:
GROUP BY system, date
表示每对系统和日期都有单独的一行。
将其用作子查询,然后在主查询中按日期分组以按日期获取计数。
SELECT date, COUNT(*) AS fount
FROM (
select system, date
from project_system
where type = 'B'
group by system, date
having min(status) = max(status) and min(status) = 'APPROVED'
) AS x
GROUP BY date
无需在子查询中获取计数。
【讨论】:
【参考方案2】:你可以用一个聚合查询做你想做的事:
select date,
( count(distinct system) -
count(case when status <> 'APPROVED' then system end)
) as num_approved_only
from project_system
where type = 'B'
group by date ;
这个想法是计算不同的系统,然后从该计数中减去状态不是'APPROVED'
的系统的数量。
【讨论】:
以上是关于如何在 SQL 中显示所有已批准状态的总数?的主要内容,如果未能解决你的问题,请参考以下文章