Postgres:交叉表查询中的存储桶始终从左侧填充

2024-06-24

我的查询如下所示:

SELECT mthreport.*
FROM crosstab
('SELECT 
to_char(ipstimestamp, ''mon DD HH24h'') As row_name, 
varid::text || log.varid || ''_'' || ips.objectname::text As bucket, 
COUNT(*)::integer As bucketvalue
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 = 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, bucket        
ORDER BY to_char(ipstimestamp, ''yyyy MM DD HH24h''), row_name, objectid, bucket' )

As mthreport(item_name text,  varid_37551 integer, 
            varid_27087  integer , 
            varid_50876  integer , 
            varid_45096  integer , 
            varid_54708  integer , 
            varid_47475  integer , 
            varid_54606  integer , 
            varid_25528  integer , 
            varid_54729  integer , 
            varid_29469 integer)

可以使用以下连接字符串针对测试表测试查询: “主机=bellariastrasse.com 端口=5432 dbname=IpsLogging 用户=来宾 密码=来宾”

该查询在语法上是正确的并且运行良好。我的问题是 COUNT(*) 值总是填充最左边的列。但是,在许多情况下,左侧列应为零或 NULL,并且仅应填充第二(或第 n)列。我的大脑正在融化,我无法弄清楚出了什么问题!


您的问题的解决方案是使用crosstab()变体与两个参数.

第二个参数(另一个查询字符串)生成输出列的列表,以便正确分配数据查询(第一个参数)中的 NULL 值。

检查tablefunc 扩展手册 http://www.postgresql.org/docs/current/interactive/tablefunc.html,特别是crosstab(text, text) http://www.postgresql.org/docs/current/interactive/tablefunc.html#AEN144882:

单参数形式交叉表的主要限制是 它对一个组中的所有值都一视同仁,将每个值插入 第一个可用列。如果您希望值列对应于 特定类别的数据,某些组可能没有数据 有些类别效果不佳。二参数形式 交叉表通过提供一个来处理这种情况明确的清单 与输出列对应的类别.

强调我的。我最近发布了几个相关答案here https://stackoverflow.com/a/10777417/939860 or here https://stackoverflow.com/a/9592419/939860 or here https://stackoverflow.com/a/10110519/939860.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres:交叉表查询中的存储桶始终从左侧填充 的相关文章

  • PostgreSQL 上的可扩展性

    我创建了自己的 R 树 rtree h 我想用我自己的数据结构 使用 PostGis 在 postgres 中创建一个扩展 我已经读过连接索引扩展 http www postgresql org docs 9 4 static xindex
  • SQLAlchemy 无法连接到本地主机上的 Postgresql

    我确信这是一个很容易修复的错误 只要我能找到它在哪里 这是 Flask 应用程序的错误 11 58 18 web 1 ERROR xxxxxx core Exception on GET 11 58 18 web 1 Traceback m
  • 用于存储键值映射的最佳 PostgreSQL 数据类型?

    我想将一个简单的键值字符串映射存储为 PostgreSQL 表中的字段 我打算将地图视为一个整体 即 始终选择整个地图 并且永远不要通过其键或值进行查询 我读过文章比较hstore json and jsonb 但这些并不能帮助我选择哪种数
  • 使用 Python 使用正确的编码从 Oracle 导入

    我很抱歉提出一个字符编码问题 因为我知道你们每天都会遇到很多问题 但我无法弄清楚我的问题 所以我还是问了 这是我们正在做的事情 使用 Python 从 Oracle DB 获取数据并cx Oracle 使用 Python 将数据写入文件 使
  • 使用 Node.js 在 Postgres 中更新插入

    我正在尝试使用带有 pg 扩展名的 node js 版本 0 5 4 在 postgres 数据库中进行插入或更新 到目前为止我有这个代码 client query text update users set is active 0 ip
  • 如何查询 JSON 元素

    假设我有一个 Postgres 数据库 9 3 并且有一个名为Resources 在里面Resources表我有字段id这是一个 int 和data这是一个 JSON 类型 假设我在该表中有以下记录 1 firstname Dave las
  • 如何在Postgresql时间戳中存储Golang time.time?

    我可以知道如何存储time timePostgresql 中的对象 例如 SQL 查询 INSERT INTO UserAccount email login time VALUES email protected cdn cgi l em
  • 查找表或视图的依赖对象

    背景 在 PostgreSQL 中删除 或替换 对象时 如果存在依赖关系 则删除将失败 不指定CASCADE Problem 数据库返回的错误信息没有列出依赖对象 示例解决方案 该查询可能类似于 SELECT FROM informatio
  • psql 的备用输出格式显示每行一列以及列名

    我在 Ubuntu 上使用 PostgreSQL 8 4 我有一个带有列的表格c1通过cN 这些列足够宽 选择所有列会导致一行查询结果多次换行 因此 输出很难阅读 当查询结果仅包含几行时 如果我可以查看查询结果 使得每行的每一列都位于单独的
  • 在 Mac 上通过 Homebrew 安装 PostgreSQL 时出错

    在 Mac OSX 10 11 6 上通过 Homebrew 安装 PostgreSQL 时 出现以下错误 Error The brew link step did not complete successfully The formula
  • 是否可以在 postgresql 中创建触发器而不执行过程?

    我想创建一个程序 其主体为 BL 我在 SQL 中找到了相同的示例 但在 postgresql 中没有找到 每个 RDBMS 都有自己的 SQL 语言 您无法在 PostgreSQL 中创建触发器 因为您可以在 Oracle MS SQL
  • 为什么“setval()”失败并显示“关系...不存在”?

    如果您尝试设置这样的序列号 SELECT setval table ID seq SELECT max ID 1 FROM table 您可能会遇到以下错误 ERROR relation table ID seq does not exis
  • 减少 plpgsql 中烦人的通知

    我有一个使用临时表的函数 如果存在则必须将其删除 drop table if exists t xy create temp table t xy on commit drop as select 随后我在视图中使用这个函数 当 selec
  • 如何使用 pgAdmin 恢复 postgreSQL 转储文件?

    我有一个 dmp 文件 想要从中恢复数据库 使用 pgAdmin 我该怎么做 在 PgAdmin3 内 在您正在使用的服务器中创建一个新数据库 右键单击该数据库并选择 恢复 使用 浏览器 按钮选择 dmp 文件 选择 恢复 开始恢复数据库
  • PostgreSQL - 返回多列的函数

    这是一个提供 2 列结果的函数 在这个函数中有一个Loop被用来返回结果 功能 Create Type Repeat rs as label text count bigint CREATE OR REPLACE FUNCTION Repe
  • 对时间序列数据重新采样

    我有一个以毫秒为单位的时间序列列表 我想对时间序列进行重新采样并对组应用平均值 我如何在 Postgres 中实现它 重新采样 是指聚合一秒或一分钟内的所有时间戳 一秒或一分钟内的所有行形成一组 表结构 date x y z Use dat
  • 当验证在另一个表上有条件时,数据库中的唯一性验证

    我在这里问了类似的问题当验证有条件时数据库中的唯一性验证 https stackoverflow com questions 24640182 uniqueness validation in database when validatio
  • PostgreSQL 的默认用户名和密码是什么?

    我正在开发一个默认使用 PostgreSQL 的开源应用程序DBMS https en wikipedia org wiki Database Database management system 现在 当我在系统上安装它时 它的配置是 P
  • 如何查明数据何时插入到 Postgres 中?

    我继承了一个现有的充满数据的 Postgres 数据库 大多数数据都有 created date 列值 一些早期数据是在跟踪之前插入的 是否有一个 Postgres 元数据表隐藏在某处 可以跟踪何时INSERT查询完成了吗 Postgres
  • 时态数据库设计,有一些变化(实时行与草稿行)

    我正在考虑实现对象版本控制 同时需要同时拥有活动对象和草稿对象 并且可以利用某人在这方面的经验的见解 因为我开始怀疑是否有可能在没有潜在可怕的黑客攻击的情况下实现这一点 为了示例 我将把它分解为带有标签的帖子 但我的用例更一般 涉及缓慢改变

随机推荐