SQL:- 我正在尝试获取表中的行,其中最多 3 行的数量应该 <=1024

标签 sql postgresql

这是我的 table

   sender     | recipient  | date       | amount
  ------------+------------+------------+--------
   Smith      | Williams   | 2000-01-01 | 200
   Smith      | Taylor     | 2002-09-27 | 1024
   Smith      | Johnson    | 2005-06-26 | 512
   Williams   | Johnson    | 2010-12-17 | 100
   Williams   | Johnson    | 2004-03-22 | 10
   Brown      | Johnson    | 2013-03-20 | 500
   Johnson    | Williams   | 2007-06-02 | 400
   Johnson    | Williams   | 2005-06-26 | 400
   Johnson    | Williams   | 2005-06-26 | 200

查询应该只返回 taylor 和 Johnson

因为 taylor 在一行中有 1024,而 johnson 在 3 行中得到它们 (512, 100, 500 = 1112) 但 williams 没有,因为需要四行才能超过 1024

我试过这个查询:

select   
    q1.r, q1.sum1, q1.c 
from
    (select  
         recipient as r, count(*) as c, sum(amount) as sum1
     from 
         transfers 
     group by 
         recipient) as q1
where 
    c <= 3 AND sum1 <= 1024

最佳答案

您可以获得每个recipient 的TOP 3 金额,然后使用SUMHAVING:

WITH Cte AS(
    SELECT *,
        ROW_NUMBER() OVER(PARTITION BY recipient ORDER BY amount DESC) AS rn
    FROM transfers
)
SELECT recipient
FROM Cte
WHERE rn <= 3
GROUP BY recipient
HAVING SUM(amount) >= 1024

关于SQL:- 我正在尝试获取表中的行,其中最多 3 行的数量应该 <=1024,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40833957/

相关文章:

MySQL查询以获得特定排名

c# - DataGridView 选择更改事件并从数据库中删除选定的行

MySQL 到 Postgres 数据迁移

sql - 在oracle中对字母数字列值进行排序

python - Django 连接多个带注释的查询集

Postgresql DB 备份理想实践

node.js - 如何使用 Sequelize 查询 tstzrange?

java - 从结果集中获取数据太慢

mysql - SQL 获取比较聚合函数的结果

sql - 在 Postgresql 中生成两个日期之间的一系列时间范围(循环时间段)