可配置 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()
。您通常会使用一种受支持的精度(例如 day
、week
、month
等)作为参数。假设您的日期或时间戳列是 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)
我目前正在开发一些 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()
。您通常会使用一种受支持的精度(例如 day
、week
、month
等)作为参数。假设您的日期或时间戳列是 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)