首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在进水数据库中调用多维聚合函数吗?

问我可以在进水数据库中调用多维聚合函数吗?
EN

Stack Overflow用户
提问于 2016-08-17 13:41:40
回答 1查看 1.9K关注 0票数 1

我在Grafana有一个查询:

代码语言:javascript
复制
SELECT mean(value) FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host", "instance"

目前,这个图表显示了在给定的时间段内,一个兔子of队列中的平均消息数,显示了每个主机的每个队列的单独图。

我想在本质上做同样的事情,但结果是每个主机只有一个图,将所有的队列加在一起。这意味着取指定时间段内所有消息计数的平均值(保持不同的instances、hosts和时间间隔分开),然后将它们相加(这一次只保持不同的hosts和时间间隔分开)。

问题是,像mean或sum这样的聚合函数只会影响整个查询,而且似乎没有一种方法可以将GROUP BY语句应用于一个聚合函数。

如果可能的话,我会做这样的事:

代码语言:javascript
复制
SELECT sum(mean(value) GROUP BY "instance") FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host"

或者这个:

代码语言:javascript
复制
SELECT sum(value) FROM (SELECT mean(value) FROM "queues_value" WHERE "host" =~ /$host/ AND "type" = 'rabbitmq_messages' AND $timeFilter GROUP BY time($interval), "host", "instance") GROUP BY time($interval), "host"

但这两个都不是有效的语法。

本质上,我首先尝试在给定的时间段内对包含特定主机上的一个特定队列的聚合进行工作,然后尝试在同一时间段内处理由每个主机的计算结果形成的聚合。

是否有一种方法可以实现我想要的--影响数据库或grafana?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-22 16:02:27

有一种方法可以用InfluxDB实现这一点,但这是一个两个步骤的过程。

首先,创建计算平均值的连续查询。

代码语言:javascript
复制
CREATE CONTINUOUS QUERY <name> ON <database>
BEGIN
  SELECT mean(value) AS value
  INTO "mean_queue_value" FROM "queues_value"
  WHERE "host" =~ /<host>/
    AND "type" = 'rabbitmq_messages'
  GROUP BY time(<interval>), "host"
END

然后简单地发出一个查询

代码语言:javascript
复制
SELECT sum(value) FROM "mean_queue_value" GROUP BY time(<interval>), "host"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38998362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档