带有生成列的 PostgreSQL 查询

2024-01-27

我有一个如下所示的架构,我想运行一个查询,在输出中为每一行获取一列points table.

所以对于每个usage我想乘以行amount使用次数的amount对于引用的points_id,然后总结并按人分组。因此,对于示例数据,我希望输出如下所示:

 Name  | foo  | bar  | baz  
-------|------|------|------
 Scott | 10.0 | 24.0 | 0.0  
 Sam   | 0.0  | 0.0  | 46.2   

这是架构/数据:

CREATE TABLE points (
   ident int primary key NOT NULL,
   abbrev VARCHAR NOT NULL,
   amount real NOT NULL
);

CREATE TABLE usage (
  ident int primary key NOT NULL,
  name VARCHAR NOT NULL,
  points_id integer references points (ident),
  amount real
);

INSERT INTO points (ident, abbrev, amount) VALUES
  (1, 'foo', 1.0),
  (2, 'bar', 2.0),
  (3, 'baz', 3.0);

INSERT INTO usage (ident, name, points_id, amount) VALUES 
  (1, 'Scott', 1, 10),
  (2, 'Scott', 2, 12),
  (3, 'Sam', 3, 3.4),
  (4, 'Sam', 3, 12);

我正在使用 PostgreSQL 9.2.8

数据只是样本。真实的有几千行usage桌子上可能有十几个points桌子。这里的真正意图是我不想硬编码所有points我在许多函数中使用它们时求和。


select 
t1.name,
sum(case when t2.abbrev='foo' then t1.amount*t2.amount else 0 end) as foo,
sum(case when t2.abbrev='bar' then t1.amount*t2.amount else 0 end) as bar,
sum(case when t2.abbrev='baz' then t1.amount*t2.amount else 0 end) as baz
from usage t1 inner join points t2 on t1.points_id=t2.ident
group by t1.name;

SQL 小提琴示例:http://sqlfiddle.com/#!15/cc84a/6 http://sqlfiddle.com/#!15/cc84a/6;

对于动态情况,使用以下 PostgreSQL 函数:

create or replace function sp_test()
returns void as
$$

declare cases character varying;
declare sql_statement text;
begin

select string_agg(concat('sum(case when t2.abbrev=','''',abbrev,'''',' then t1.amount*t2.amount else 0 end) as ', abbrev),',') into cases from points;

drop table if exists temp_data;

sql_statement=concat('create temporary table temp_data as select 
t1.name,',cases ,' 
from usage t1 inner join points t2 on t1.points_id=t2.ident
group by t1.name ');

execute sql_statement;

end;
$$
language 'plpgsql';

函数使用临时表来存储动态列数据。

通过以下方式调用函数来获取数据:

select * from sp_test(); select * from temp_data;

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

带有生成列的 PostgreSQL 查询 的相关文章

  • 插入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型

    当我尝试插入分区表时 出现以下错误 SemanticException 错误 10044 第 1 23 行无法插入目标表 因为列号 类型不同 表 insclause 0 有 6 列 这 3 列已分区 我们不需要任何必须从中转储 存储的过滤器
  • 如何在 DB2 AS/400 中将小数字段转换为日期字段?

    我有一个 DECIMAL 字段 其中包含 AS400 格式的日期 1100614 我努力了 cast MYDATE as DATE 但我无法将 DECIMAL 转换为 DATE 而 DATE MYDATE 返回空值 如何将此字段转换为日期字
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • SQL 中基于下一条记录和上一条记录的复杂排序

    这是一个后续问题根据 SQL 中的下一条记录和上一条记录进行排序 https stackoverflow com questions 30477803 sorting based on next and previous records i
  • SQL 查询用于计算每个客户的订单数量和总金额

    我有两张桌子Order与列 OrderID OrderDate CID EmployeeID And OrderItem与列 OrderID ItemID Quantity SalePrice 我需要返回客户 ID CID 每个客户的订单数
  • 无法为数据库添加 SSL 支持

    我正在使用 Spring 3 Hibernate 和 postgres 9 2 为了启用 SSL 数据库连接 我按照以下步骤操作 创建自签名证书 参考 http www postgresql org docs 9 2 static ssl
  • Postgresql 一张表的多个计数

    我想从表中的两列中获得这些列中值的统一计数 例如 两列是 表 报告 type place one home two school three work four cafe five friends six mall one work one
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • PostgreSQL-过滤日期范围

    我是一名 SQL 开发人员 大部分时间都花在 MSSQL 上 我正在寻找一种更好的方法来过滤 PostgreSQL 数据库中的 无时区时间戳 字段 我在用着 Where DateField gt 2010 01 01 and DateFie
  • 实现软删除的最佳方法是什么?

    目前在做一个项目 我们要对大部分用户 用户角色 实现软删除 我们决定添加一个is deleted 0 数据库中每个表的字段并将其设置为 1 如果特定用户角色点击特定记录上的删除按钮 现在为了将来的维护 每个SELECT查询需要确保它们不包含
  • 快速查询最新记录的方法?

    我有一张这样的表 USER PLAN START DATE END DATE 1 A 20110101 NULL 1 B 20100101 20101231 2 A 20100101 20100505 在某种程度上 如果END DATE i
  • 如何识别拼写不同的相似单词

    我想从数据库中过滤掉重复的客户名称 一位客户可能有多个同名但拼写差异不大的系统条目 这是一个示例 名为 Brook 的客户可能有 3 个系统条目 有了这个变化 布鲁克 贝尔塔 布鲁克 贝尔塔 比鲁克 贝尔塔 假设我们将此名称放入一个数据库列
  • 获取带有计数的不同记录

    我有一张桌子personid and msg列 personid msg 1 msg1 2 msg2 2 msg3 3 msg4 1 msg2 我想得到总计msg对于每个personid 我正在尝试这个查询 select distinct
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • 快速将列的副本添加到 MySQL 表

    我需要一种快速的方法来复制表中的 DATETIME 列并为其指定一个新名称 我的表中有一个名为 myDate 的列 名为 myResults 我需要一个查询来在名为 newDate 的表中创建一个新列 该列的数据与 myDate 列完全相同
  • 如何获取自定义订单的结果? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 代替ASC or DESC 我希望我的查询结果采用特定的自定义顺序 例如 如果我想要的结果不是 A B C D 而是 P A L H 该怎么
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR

随机推荐

  • 当 iOS 10 发布时,我可以使用 Xcode 7.3 提交 Swift 2.2 应用程序吗?

    当 iOS 10 发布时 我是否能够向应用程序商店提交使用 Swift 2 2 运行并使用 Xcode 7 3 构建的应用程序 或者是否必须迁移到 swift 2 3 或 Swift 3 并使用 Xcode 8 构建应用程序 是的你可以 甚
  • 使用 JNI 传递并返回 OpenCv Mat 对象

    我想在 JNI 中编写一个这样的函数 JNIEXPORT jobject JNICALL Java com datumdroid android ocr simple HoughLine nativeDetectLine JNIEnv je
  • Cucumber IDE 可以自动完成功能编写吗?

    有没有Eclipse插件可以用来写黄瓜的特点 http github com aslakhellesoy cucumber wiki feature introduction具有自动完成功能 我想从其他功能中找到并重用步骤会很好 有任何想法
  • Google Charts 次轴折线图

    我目前正在学习一些带有网络编辑的谷歌图表 以扩大我的知识 但我遇到了一个无法解决的问题
  • Select2 v4 无法使用 Tab 键进入,按 Enter 键,然后选择,使用 Firefox(又称无鼠标访问)

    I am currently unable to tab into a Select2 enabled
  • 动画 UICollectionView 标题高度变化

    我目前正在使用带有标题的 UICollectionView 并且想知道如何在需要时设置动画并扩展标题高度 我正在尝试模拟 iPhone 版 Expedia 应用程序中的功能 点击图像会展开标题单元格以显示中心的图像 我已经尝试这个有一段时间
  • Gmail API 批量获得支持吗?

    我正在使用 Gmail API 进行 WEB HTTP 调用 有没有办法批量获取消息内容 看来messages list只返回messageIds messages get只支持单条消息查询 列表API https www googleap
  • 检查 Silverlight 中的互联网连接

    我正在编写一个 Silverlight 4 应用程序 并想在打开已安装的浏览器外应用程序时检查是否存在有效的互联网连接 然后从我的网站下载一些数据 做这个的最好方式是什么 我意识到我可以在 WebRequest 周围放置一个 try cat
  • 使用 jQuery 更改 Chosen.js 选择框的值

    我正在尝试更改选择框的值选择 js http harvesthq github com chosen 覆盖 这个想法是当用户单击按钮时更改所选值 使用常规选择框 我可以通过执行以下操作来更改值 GroupsShowNext unbind c
  • 在 SqlCommand 中使用参数删除

    我使用 ADO NET 从数据库中删除一些数据 如下所示 using SqlConnection conn new SqlConnection connectionString try conn Open using SqlCommand
  • knitr kable:RNW 的 PDF 中的文本颜色为灰色

    当我使用创建表时knitr kableRNW 文件中的函数 PDF 中表格项目的文本颜色显示为灰色 我想把它改成黑色 我怎样才能做到这一点 documentclass article begin document lt lt gt gt k
  • “and”如何与奇数和偶数相关?在JS中

    我的任务是弄清楚如何确定奇数和偶数 我无法使用 我使用 是因为我在互联网上找到了它 但我找不到适合它工作方式的方法 N A 我创建的样本是 if 22 1 0 return true else return false 返回真 按位运算符的
  • 动态嵌套 React.js 组件

    我想创建一个灵活 动态可以使用 React js 呈现的 JSX 表单格式 此格式必须包含嵌套组 一个组可以包含其他组以及问题 var Group React createClass render function return field
  • 如何从 Datareader 获取多行

    这是我的代码 它工作正常 但只返回一行 正如您在 SQL 语句中看到的 我需要在表单中使用的数据网格中返回 2 行 虽然该过程读取 2 行 但它只显示一行 NameAddrmark 是字段的构造函数 public NameAddrmark
  • 向用户发送激活电子邮件

    我该如何检查电子邮件是否确实存在 无法理解明星如何发送带有唯一链接的邮件 用户单击该链接以验证他是电子邮件的所有者 创建 2 个名为激活密钥的新列 并激活并存储一些随机字符串 发送包含激活密钥的电子邮件 并更新与该激活链接匹配的用户已激活
  • 在特定时间和日期调用 iOS 应用程序

    我希望我的 iOS 应用程序能够准确无误地知道特定日期和时间何时到达 现在这个时间可能是几天 几周 几个月 我的应用程序可能处于 backgorund 或终止状态 所以有以下几种选择 A 本地通知 但当我的应用程序处于后台时它不会通知 b
  • Chrome 中的 CSS 动画棘手错误

    我有以下 CSS webkit keyframes fade out from opacity 1 to opacity 0 webkit keyframes fade in from opacity 0 to opacity 1 intr
  • 如何避免Core Motion控制的SceneKit相机滚动?

    我正在将 SceneKit 相机设置为当前CMDeviceMotion使用的态度CMDeviceMotion 扩展 https gist github com travisnewby 96ee1ac2bc2002f1d480在此描述的ans
  • Google Analytics 报告大量 Internet Explorer 7 流量

    对于我们的网站 Google Analytics 报告的 Internet Explorer 7 用户数量过高 40 当我们进一步深入研究数据时 我们发现大部分 IE7 点击量都来自 Windows 7 等较新的操作系统 而 IE7 从来都
  • 带有生成列的 PostgreSQL 查询

    我有一个如下所示的架构 我想运行一个查询 在输出中为每一行获取一列points table 所以对于每个usage我想乘以行amount使用次数的amount对于引用的points id 然后总结并按人分组 因此 对于示例数据 我希望输出如