首页 > 解决方案 > 基于字段内容将行与聚合函数值组合的 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

标签: sqlpostgresqlcount

解决方案


使用相关子查询:

SELECT t1.col1,
       (SELECT COUNT(*) - 1 FROM tableA t2 WHERE t2.col1 >= t1.col1 AND t2.col1 <= t1.col1 + 10) counts
FROM tableA t1 

请参阅演示


推荐阅读