Function 带$libdir/tablefunc交叉表\u哈希函数的postgres交叉表查询
我的交叉表查询(见下文)运行得很好。然而,我必须生成大量这样的查询,而且至关重要的是,列定义的数量每天都会有所不同。如果输出columndefs的数量与交叉表的第二个参数的数量不匹配,则交叉表将抛出、出错并中止。因此,我不能像在当前查询中那样“硬连接”列定义,而是需要一个函数来确保列定义能够动态同步。是否可以编写一个通用的postgres函数,在所有这样的实例中都可以重用?我的问题是:Function 带$libdir/tablefunc交叉表\u哈希函数的postgres交叉表查询,function,postgresql,pivot,crosstab,Function,Postgresql,Pivot,Crosstab,我的交叉表查询(见下文)运行得很好。然而,我必须生成大量这样的查询,而且至关重要的是,列定义的数量每天都会有所不同。如果输出columndefs的数量与交叉表的第二个参数的数量不匹配,则交叉表将抛出、出错并中止。因此,我不能像在当前查询中那样“硬连接”列定义,而是需要一个函数来确保列定义能够动态同步。是否可以编写一个通用的postgres函数,在所有这样的实例中都可以重用?我的问题是: SELECT * FROM crosstab ('SELECT to_char(ipstimestamp,
SELECT *
FROM crosstab
('SELECT
to_char(ipstimestamp, ''mon DD HH24h'') As row_name,
ips.objectid::text As category,
COUNT(*)::integer As value
FROM loggingdb_ips_boolean As log
INNER JOIN IpsObjects As ips
ON log.Varid=ips.ObjectId
WHERE (( log.varid = 37551)
OR (log.varid = 27087)
OR (log.varid = 29469)
OR (log.varid = 50876)
OR (log.varid = 45096)
OR (log.varid = 54708)
OR (log.varid = 47475)
OR (log.varid = 54606)
OR (log.varid = 25528)
OR (log.varid = 54729))
GROUP BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, objectid, category
ORDER BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, objectid, category',
'SELECT DISTINCT varid
FROM loggingdb_ips_boolean ORDER BY 1;'
)
As CountsPerHour(row_name text,
"25528" integer,
"27087" integer,
"29469" integer,
"37551" integer,
"45096" integer,
"54606" integer,
"54708" integer,
"54729" integer)
PS:请注意,此查询可以在以下服务器上针对测试数据运行:
主持人:bellariastrasse.com
数据库:ipsloging
用户:来宾
密码:guest恐怕您想要的不完全可能。如果返回类型不同,您可以
- 创建一个返回通用
记录集的函数
- 为每个不同的情况创建一个具有匹配返回类型的新函数