sql - 如何在 Postgres 中选择 TOP 记录。不是类似的问题
问题描述
我有一个包含三列(City、Orderid、Total_quantity)和超过 500 行的表。我想根据 total_quantity 获取前 50 条记录。我可以用 rank_number 做到这一点,但可以通过一个例子来理解这种扭曲。
示例:考虑到只有 3 个城市,选择前 5 个(仅作为示例)。
Table1
City Orderid Total_quantity
---------------------------
A 1 90
A 2 80
A 3 70
B 4 70
B 5 65
B 6 55
C 7 79
C 8 24
'
'
'
如果我选择前 5 名,那么第一条记录应该来自城市 A 的最大总量,第二条记录应该来自城市 B 的最大总量,第三条记录应该来自城市 C 的最大数量。这是扭曲,第四条记录应该来自城市 A 的最大数量,然后最后的第五条记录应该来自城市 B 的最大总量。所以输出会像
输出:
Table1
City Orderid Total_quantity
---------------------------
A 1 90
B 4 70
C 7 79
A 2 80
B 5 65
'
'
'
解决方案
select City, Orderid, total_quantity,
rank() OVER (PARTITION BY City ORDER BY total_quantity desc) as rank_quantity
from table
order by rank_quantity,city LIMIT 5;
让我知道它是否有效
推荐阅读
- java - Flutter - 组织代码库的最佳方式?
- python - 格式化样式数据框中的行?
- react-native - Expo:无法在 ReactNative App 中创建 PDF 并将其存储到 Android 11
- c# - 如果未指定默认端口,则无法连接到 SQL Server
- python - 我在抓取时从 wsj.com 收到了错误的文本
- r - 如何根据多列中的值有条件地改变 R 中的变量?
- java - 如何防止 Maven Surefire 自动运行 Spring 集成测试
- prometheus - 使用 Prometheus 指标存储时间戳
- java - Java SimpleDateFormat 的错误输出
- asp.net-core - 即使在挑战中指定不同的方案时,也会在我的 AuthenticationHandler 中调用 HandleChallengeAsync