首页 > 解决方案 > MYSQL 查询中的多个计数

问题描述

我想用两个不同的计数标准来计算一个特定的数据库列,这样我就可以计算一个百分比

例如让同样的数据库列称为延迟,列中的数据包含秒数。

我想计算延迟消息的数量 > 50 秒,但也要计算同一查询中延迟消息的总数(即 > 0 秒)

我当前查询 > 50 秒如下

select COUNT(*) from table WHERE date = 20180701 and CAST(Latency As Signed) > 50

我如何在同一个查询中包含 > 0 秒的计数?

标签: mysql

解决方案


使用条件聚合:

SELECT
    COUNT(CASE WHEN CAST(Latency As Signed) > 50 THEN 1 END) AS latency,
    COUNT(CASE WHEN CAST(Latency As Signed) > 0  THEN 1 END) AS total,
    100.0 * COUNT(CASE WHEN CAST(Latency As Signed) > 50 THEN 1 END) /
            COUNT(CASE WHEN CAST(Latency As Signed) > 0  THEN 1 END) AS percentage
FROM table
WHERE date = 20180701;

推荐阅读