【问题标题】:how to show total count of all approved status in SQL?如何在 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

我应该如何更改我的查询?

谢谢。

【问题讨论】:

标签: mysql sql count


【解决方案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' 的系统的数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多