【问题标题】:How to get the percentage of count under filtered selection of records from a table如何在从表中过滤选择记录的情况下获取计数百分比
【发布时间】:2021-06-03 16:51:57
【问题描述】:

有一个架构(Perf_Stat)在一段时间内填充了性能统计信息:

Event              Event_Ts         Event_Stat
------------------------------------------
Entry        2021-02-15 19:30:10       Success
Update       2021-02-15 19:35:10       Success
Delete       2021-02-15 19:23:10       Failure
Update       2021-02-15 19:68:10       Success
Delete       2021-02-15 18:30:10       Failure
Update       2021-02-15 18:59:10       Success
and so no.....

每当执行时,我需要每隔一小时从该表中获取失败 Update 事件的百分比计数。喜欢

在下一次运行时,它应该给我的结果是:

**23%** (Which denotes 23% of the total **Update** events that failed in the last hour)

我尝试过但失败的是:

SELECT COUNT
(
    (
        (SELECT COUNT(*) FROM Perf_Stat WHERE Event = 'Update' AND DATEDIFF(hour, Event_Ts, GETDATE() < 1) AND Event_Stat = 'Failure') * 100
    ) / 
    (
        SELECT COUNT(*) FROM Perf_Stat WHERE Event = 'Update' AND DATEDIFF(hour, Event_Ts, GETDATE() < 1)
    )
) from Perf_Stat;

但是,我收到聚合函数错误。请建议如何获得所需的结果。

【问题讨论】:

  • 您只需要最后一小时还是要按小时在整个表中汇总?并且是一个小时的开始和结束时间:1:00, 2:00,还是正好在一小时前,比如 1:07, 2:07
  • 正好是最后一小时。
  • 那么戈登的第二个答案对你有用

标签: sql sql-server sql-server-2008


【解决方案1】:

每当执行时,我需要每隔一小时从该表中获取失败更新事件的百分比计数。

我会这样处理:

SELECT AVG(CASE WHEN Event = 'Update' THEN 1.0 ELSE 0 END)
FROM FROM Perf_Stat
WHERE DATEDIFF(hour, Event_Ts, GETDATE()) < 1;

我认为时间比较是您真正想要的——最后一个完整小时。在最后一个小时,我会使用:

WHERE Event_Ts >= DATEADD(hour, -1, GETDATE())

【讨论】:

  • 我需要以百分比形式显示计数,AVG() 会这样做吗?
  • @Aashu... 是的,只要您使用1.0 而不是1 就可以了
  • @Aashu... 。 . .这会将值生成为 0 和 1 之间的数字——一个比率。您可以使用 100.0 而不是 1.0 来获取 0 到 100 之间的值。
猜你喜欢
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多