计算每组中特定行的百分比

问题描述 投票:0回答:2

我正在尝试制作一个 Grafana 时间序列图表,显示 Pi-hole 阻止的查询的百分比。我所做的查询如下,但结果肯定不正确,我认为这是因为我处理 where 子句的方式。

SELECT
  timestamp AS time,
  100.0 * (
    SELECT COUNT(*) AS query_count
    FROM queries
    WHERE status IN (1, 4, 5, 6, 7, 8, 9, 10, 11, 15)
  ) / COUNT(*) AS percentage
FROM
  queries
GROUP BY
  time
sql sqlite aggregate-functions grafana pihole
2个回答
0
投票

如果我理解正确,那么使用条件聚合。对于每个组,以下查询将为您提供具有特定状态的查询的百分比:

SELECT
  timestamp AS time,
  100.0 * COUNT(CASE WHEN status IN (1, 4, 5, ...) THEN 1 END) / COUNT(*) AS percentage
FROM
  queries
GROUP BY
  time

或者:

SELECT
  timestamp AS time,
  AVG(CASE WHEN status IN (1, 4, 5, ...) THEN 100.0 ELSE 0.0 END) AS percentage
FROM
  queries
GROUP BY
  time

0
投票

我将其添加到 ypur 查询中:

 Select
 timestamp as time,
(  100.0 * 
(
SELECT COUNT( * ) as query_count FROM queries WHERE status IN (1, 4, 5, 6, 7, 8, 9, 10, 11, 15)
) ) / (SELECT COUNT( * ) as query_count FROM queries) as percentage
FROM 
  queries
GROUP BY
  time;

我在开始时添加选择,并在子查询上添加选择以进行计数

© www.soinside.com 2019 - 2024. All rights reserved.