可以在查询中使用 IF 吗?

Posted

技术标签:

【中文标题】可以在查询中使用 IF 吗?【英文标题】:Possible to use IF in a query? 【发布时间】:2021-03-25 22:39:22 【问题描述】:

我正在使用 Grafana 绘制来自 mysql 数据源的数据。是否可以在面板的查询编辑器中使用 IF ... THEN ... 类型语句。我想创建一个可以放入 IF 的变量。我希望变量是一个条件,不一定要直接在查询中使用。

例如:

//IN THE DATA SOURCE:

CREATE TABLE Example (Id INT, ANIMALS VARCHAR(15));
INSERT INTO Example VALUES (1,'Dog'), (2,'Fish'), (3,'Cat'), (4,'Lizard')

对于值为“哺乳动物”、“爬行动物”、“其他”的变量测试:

//WHAT I'D LIKE IN GRAFANA QUERY EDITOR:

IF($Test = "Mammal") THEN
SELECT * FROM Example WHERE Id = 1 OR Id =3;
ELSE
SELECT * FROM Example WHERE Id = 2 OR Id =4;
END IF;

这种基于条件的查询是否可能?如果是这样,让它工作的正确语法是什么?有什么方法可以使用 Grafana 变量来产生类似的效果?

【问题讨论】:

为什么在查询中需要这种业务逻辑? 【参考方案1】:

使用查询。查询以 SELECT 关键字开头。查询前不要使用任何 IF ELSE 条件,例如:

SELECT * 
FROM Example 
WHERE 
  Data IN ( $variable:csv )

此 WHERE 条件语法适用于单值、多值 Grafana 仪表板变量以及 All 值(没有自定义 All 值,但 blank=auto)。当然这个条件主要是针对 INT 列类型的。 STRING 类型可能需要不同的类型(例如,使用 LIKE 和正则表达式匹配)。

在 WHERE 部分中编写所有逻辑(依赖于仪表板变量)。使用查询检查器查看生成的 SQL 并对其进行调整以更正 SQL 语法。

【讨论】:

$idvariable:csv 部分是什么? @always_confused grafana.com/docs/grafana/latest/variables 你提到要使用变量 仅使用 Data IN ($variable) 即可正常工作是否有理由指定 csv 格式?

以上是关于可以在查询中使用 IF 吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL里if语句和case语句有啥区别吗?哪个使用更高效?就是查询更优化?

您可以使用更多参数构建 Xamarin UITest 查询吗?

我们可以在数据帧的每一行上使用 spark sql 函数吗?

在电源查询中使用 if 语句而不添加额外的列

如何在更新语句中使用 if 条件

可以在 SELECT 查询中使用 IF() 但不能在 UPDATE 中使用