sql - 通过不可连接列中的最大值在 1:M 关系上左连接
问题描述
我正在使用 SQL 解决 PostgreSQL 数据库上的此类问题。
我有 2 个表,为简单起见,假设它们只有这些列并且具有 1:M 关系。
表 A:
姓名 | 类型 | 笔记 |
---|---|---|
ID | 长 | 首要的关键 |
状态 | 细绳 | 保存枚举值的字符串(为简单起见,假设值 X、Y、Z |
表 B:
姓名 | 类型 | 笔记 |
---|---|---|
ID | 长 | 首要的关键 |
援助 | 长 | A表的外键 |
最大限度 | 长 | 持有最高出价的栏目 |
用户身份 | 长 | 出价的用户 |
我对 SQL 结果的期望:
选择处于状态 Z 的所有表 A id和表 B 记录的 user_id 最高且 user_id 等于 1(因此,如果表 B 中有 3 条记录具有最大列值(1,2,3),则选择最大值为 3) 的行
业务要求进一步澄清问题:
获取所有 A 表行 id,它们处于状态 Z,并且具有一些可变 ID 的用户(为简单起见,假设为 1)在表 B 中的所有子项中具有最大值。
我尝试在 a.id = b.a_id 上进行一些左连接,我知道会有一些 AND 和一些带有 MAX() 的内部选择。但是当我不最大化连接列时,我不确定如何执行 select max() 。
解决方案
SELECT * FROM
table_a a1 JOIN table_b b1 ON (a1.id=b1.a_id) WHERE (a_id,max) in
(SELECT a_id,max(max) FROM
table_a a JOIN table_b b ON (a.id=b.a_id) GROUP BY b.a_id) and b1.user_id=1;
推荐阅读
- google-cloud-platform - 在终端命令中链接到谷歌云存储桶文件?
- amazon-web-services - K8s 动态卷预置:AWS 上的动态预置不支持 claim.Spec.Selector
- python - 在模块化 python 代码库中使用 Dask LocalCluster()
- java - 使用 Retrofit2 在 Recycleview 中得到空响应?
- algorithm - 如何计算 (31,26) 的汉明码?
- javascript - 如何在 node.js 中创建一个登录页面,该页面指向需要在客户端使用 p5.js 运行的网页?
- java - Appium问题。如果“listen eaddrinuse: address already in use”,如何停止呢?为什么它没有停止?
- c# - 使用 mailkit 检索电子邮件链,仅返回对话的第一封电子邮件
- postgresql - 如何使用shell脚本逐行读取postgres db的表数据
- javascript - window.open() 显示相同的 .html