具有分组依据的 PostgreSQL 聚合函数

Posted

技术标签:

【中文标题】具有分组依据的 PostgreSQL 聚合函数【英文标题】:PostgreSQL agregation function with group by 【发布时间】:2021-10-29 19:56:18 【问题描述】:

我尝试从 PostgreSQL 获取输出到 Grafana,但出现错误

db 查询错误:pq:列“systemevents.receivedat”必须出现在 GROUP BY 子句或在聚合函数中使用

这是代码

SELECT 
  $__timeGroupAlias(receivedat,$__interval),
  SUBSTRING(message, '(?:[0-9]1,3\.)3[0-9]1,3') AS the_address,
  COUNT(message) as cc 
FROM systemevents 
WHERE
  $__timeFilter(receivedat,$__interval)
GROUP BY the_address 
ORDER BY cc DESC

如何解决这个问题?

【问题讨论】:

【参考方案1】:

将其添加到 GROUP,例如(1 指的是 SELECT 的第一列):

SELECT 
  $__timeGroupAlias(receivedat,$__interval),
  SUBSTRING(message, '(?:[0-9]1,3\.)3[0-9]1,3') AS the_address,
  COUNT(message) as cc 
FROM systemevents 
WHERE
  $__timeFilter(receivedat,$__interval)
GROUP BY 1, the_address 
ORDER BY cc DESC

【讨论】:

以上是关于具有分组依据的 PostgreSQL 聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

即使字段包含在分组依据列表中,分组依据或聚合错误

PySpark 聚合和分组依据

如何对具有聚合函数的 Oracle 查询进行分组

如何根据多列的顺序对 PostgreSQL 中的聚合进行分组?

Postgresql:如何在聚合函数之后显示附加列

SqlServer:分组查询和聚集函数