可配置 SQL GROUP BY 变量

Configurable SQL GROUP BY variable

我目前正在开发一些 SQL 聚合查询来计算来自一个来源的数据 table。目标是在一个 executable 查询/函数等中具有不同的聚合粒度。我目前正在 PostgreSQL 上开发,但代码应尽可能符合 ANSI SQL与大多数数据库变体兼容。

示例:

SELECT
   COUNT(a) as amount,
   SUM(b) as sum,
   c as static_grouping,
   @vargr as variable_grouping,
   @vardesc as variable_grouping_description
FROM whatever
GROUP BY c, @vargr, @vardesc

@vargr 可以按日期驱动,例如每天、每周、每月…… @vardesc 是将聚合类型视为文本的标识符

使用 UNION 进行多个查询不是一种选择,因为有多个分组语句发生变化(导致每个结果集有 60 多个单个查询)。有没有办法用函数、while 循环等来做到这一点?

感谢您提供正确方向的提示,祝您今天愉快,注意安全!

此致 克里斯蒂安

如果你想按不同的日期粒度分组,那么一个选项使用date_trunc()。您通常会使用一种受支持的精度(例如 dayweekmonth 等)作为参数。假设您的日期或时间戳列是 tscol,您将执行:

SELECT
   COUNT(a) as amount,
   SUM(b) as sum,
   c as static_grouping,
   DATE_TRUNC(, tscol) as variable_grouping,
    as variable_grouping_description
FROM whatever
GROUP BY c, DATE_TRUNC(, tscol)