sql - 基于字段内容将行与聚合函数值组合的 SQL 查询
问题描述
我正在学习 SQL,遇到了一个我正在努力定义查询的案例。
假设一个简单的表“tableA”,具有以下值:
col1
----
100
110
115
118
121
122
150
现在,作为我需要的查询类型的一个简单示例:对于每一行,我想计算值满足特定条件的行数,由当前字段值参数化。因此,例如,假设条件是“值不大于字段值 + 10”,我想创建一个返回以下内容的查询:
col1 counts
------------
100 1 (because only 110 is in the range 100 to 100 + 10)
110 0 (because there are no values in the range 110 to 110 + 10)
121 3 (122, 123, 124 are in the range 121 to 121 + 10)
122 2 (123, 124)
123 1 (124)
124 0
150 ...
为给定值编写一个返回计数的查询显然很简单
select count(*) from tableA where col1 > 100 and col1 < 100 + 11
我正在考虑用 WITH 语句、JOINS 等来创建上面的目标表,但没有成功。任何建议如何解决这个问题都将受到高度赞赏。
PS如果重要的话:我使用的是Postgresql 13
解决方案
使用相关子查询:
SELECT t1.col1,
(SELECT COUNT(*) - 1 FROM tableA t2 WHERE t2.col1 >= t1.col1 AND t2.col1 <= t1.col1 + 10) counts
FROM tableA t1
请参阅演示。
推荐阅读
- javascript - 2结帐响应缓慢的网络挂钩
- authentication - 如何通过 Azure 数据工厂向 QnA Maker API 进行身份验证?
- c++ - 如何查看 C++ 中不同数据结构的实际实现代码?
- python - 如何安装带有诗歌的 Python 包?
- spring - 如何在 spring 中连接 Redis 和 Couchbase
- shopify - 商店软件 / WordPress 集成
- ruby-on-rails - 如何在 Rails 项目上实现查询字符串?
- node.js - NodeJs:没有返回正确的 Dynamodb 表计数
- firebase - 具有多个触发器的云函数 - 计划和 onCall
- javascript - typeof 可以返回虚假值吗?