GRAFANA数据库查询错误:pq: 列“name”不存在。

3
我正在尝试在Grafana中获取关于列中不同条目的图表,但是Grafana试图将该条目识别为列而不是列值。
我有以下设置:
一个PostgreSQL数据库(v11)。
一个名为People的表。 这个表包含3个列:id、name、age。
我想要获取每个名字所对应的平均年龄。
我在Grafana中定义了一个查询变量叫做firstname,它由以下查询返回:
SELECT DISTINCT(name) from People;
然后它显示一个下拉列表,包含所有唯一的名字。
为了获取每个名字的平均年龄,我在Grafana中编写了以下查询:
SELECT AVG(age), pit_date FROM People WHERE name = $firstname GROUP BY pit_date LIMIT 15;
但是我得到了错误信息: db query error: pq: column "selena" does not exist
我的理解是,Grafana试图定位列"selena"而不是定位在列"name"中的"selena"。
你有没有想法,我错在哪里以及如何解决这个问题?非常感谢。

1
使用DISTINCT时,括号的目的是什么?我认为这会引起误解,因为它让人觉得DISTINCT是一个函数。 - undefined
你说得对。解决方案是将查询声明为... WHERE name in ( $firstname )....。同时,还需要在变量设置中勾选“包括所有选项”,以确保它真正起作用。 - undefined
3个回答

4
问题是由于在变量替换周围缺少引号引起的。
在Grafana替换了firstname变量后,查询的where子句看起来像这样:name = selena。从SQL的角度来看,selena应该是列名。为了将其作为字符串处理,您需要用单引号括起来:
SELECT AVG(age), pit_date 
FROM People 
WHERE name = '$firstname' 
GROUP BY pit_date 
LIMIT 15

1
我认为在Grafana中,你需要使用''来表示查询中的模板变量。尝试一下这个语法:
SELECT AVG(age), pit_date FROM People WHERE name = '$firstname' GROUP BY pit_date LIMIT 15
希望对你有所帮助,兄弟。

很接近,但花括号与问题无关。您的查询将起作用,因为不仅添加了花括号,还添加了引号。 - undefined
太棒了,谢谢你的反馈,兄弟。 - undefined

0

对我有效的是以下查询:

SELECT AVG(age), pit_date FROM People WHERE name in ( $firstname ) GROUP BY pit_date LIMIT 15;

还要确保在变量设置中检查选项包括全部,以使更改生效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接