Grafana:SQL 查询 - 将“过滤器”应用于“计数”

Posted

技术标签:

【中文标题】Grafana:SQL 查询 - 将“过滤器”应用于“计数”【英文标题】:Grafana: SQL query - Apply "filter" to "count" 【发布时间】:2021-12-06 14:26:26 【问题描述】:

我正在尝试在我的 SQL 查询中对“计数”应用过滤器,但无法找到正确的方法。

左表的查询显示了错误类型可能具有的不同错误级别。就我而言,“0 到 3”,其中 0 表示信息,3 表示关键错误。

SELECT
  stringsplit(alerts.Source, " - ", 1) AS ERROR_Level,
  stringsplit(alerts.Source, " - ", 2) AS ERROR_Type
FROM alerts

右表的查询显示总体错误计数。 (出于演示目的,我在实数中添加了一些随机数。) 第 1 列显示错误类型,第 2 列显示错误总数。 从第 3 列开始,我想仅过滤定义为级别 3 的错误。 下一列错误级别 2 依此类推...

SELECT
  stringsplit(alerts.Source, " - ", 2) AS ERROR_Type,
  COUNT(alerts.Source)+100 AS ERROR_Count,
  COUNT(alerts.Source)+73 AS ERROR_Critical,
#  COUNT(alerts.Source) FILTER(WHERE stringsplit(alerts.Source, " - ", 1) = 3) AS critical,
  COUNT(alerts.Source)+30 AS ERROR_Warning
#  COUNT(alerts.Source) FILTER(WHERE stringsplit(alerts.Source, " - ", 1) = 2) AS warning
FROM alerts
GROUP BY ERROR_Type

正如您在上面的代码中看到的...stringsplit(alerts.Source, " - ", 1) 打印出错误级别stringsplit(alerts.Source, " - ", 2) 打印出错误类型

【问题讨论】:

【参考方案1】:

我使用 SUM 解决了它。

SELECT
  stringsplit(alerts.Source, " - ", 2) AS error_type,
  COUNT(alerts.Source) AS total,
  SUM(IF(stringsplit(alerts.Source, " - ", 1) = 3,1,0)) AS critical_errors,
  SUM(IF(stringsplit(alerts.Source, " - ", 1) = 2,1,0)) AS errors,
  SUM(IF(stringsplit(alerts.Source, " - ", 1) = 1,1,0)) AS warnings,
  SUM(IF(stringsplit(alerts.Source, " - ", 1) = 0,1,0)) AS informations
FROM alerts
GROUP BY ERROR_Type

【讨论】:

以上是关于Grafana:SQL 查询 - 将“过滤器”应用于“计数”的主要内容,如果未能解决你的问题,请参考以下文章

Grafana Postgres 使用可具有多个值的 Where 查询时出错

当变量过滤器设置为“全部”时,Grafana 不显示任何数据点

Grafana 更改 SQL 查询以汇总每个数据点

Grafana - 如何为 Mysql 数据源创建 sql 查询部分变量/宏

将 Django 过滤器转换为 RAW SQL 查询 [重复]

grafana 面板间通信