sql - SQL 查询 2 限制
问题描述
我有以下问题,我想限制返回的项目总数,同时将一个值限制为一定数量
我做这样的查询
select * from messages order by m.priority ASC limit 5;
现在我想做以下事情,我有一个名为 running 的字段,我希望能够说在这些结果中我希望有最大 n 个未运行的结果,例如 2,但我仍然想得到 5 个结果基于优先级
因此,如果我在数据库中有以下数据:
priority | running
----------+---------
1 | true
2 | false
3 | false
4 | false
5 | false
6 | true
7 | true
8 | true
我的总限制为 5,非运行限制为 2 我希望得到以下结果
priority | running
----------+---------
1 | true
2 | false
6 | true
7 | true
8 | true
有人建议如何在 PostgreSQL 中执行此操作吗?
更新:我得到了根据@Gordon Linoff 回答给出我想要的结果的查询
select m.*
from (select t.*,
row_number() over (partition by t.running order by t.priority) as seqnum
from message t) m
where ((not m.running and seqnum <= 2) or (m.running and seqnum <= 5)) order by m.priority limit 5;
解决方案
我想你想要:
select m.*
from (select m.*,
row_number() over (partition by running order by m.priority) as seqnum
from messages
) m
where ((not m.running and seqnum <= 2) or
(m.running and seqnum <= 3)
);
这里 3 = 5 - 2。
推荐阅读
- jxls - JXLS 不可访问或未知属性
- c# - 为什么我的 ListView 没有绑定到 ItemSource?
- aspnetboilerplate - 如何在 ASP.NET Boilerplate 中将 Angular 应用程序部署到 IIS?
- bash - 如何在一个文件中一个一个地运行一组终端命令?
- php - PHP中整数的反向块分割
- powershell - 为什么我的 -match 调用在获取网络驱动器时包含无效项目?
- vba - Excel 2013 VBA 向公式添加新行
- php - 加密事件在 Codeignator 中无法正常工作
- javascript - jQuery 验证方法(必需:false)不起作用
- python - 如何为带有状态的 Keras fit_generator 编写生成器?