You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何获取窗口函数PARTITION分区的总行数

解决方法

你可以直接用COUNT(*)配合和行号相同的PARTITION BY规则作为窗口函数,就能直接拿到每个犬种分区的总记录数,同一个犬种下的所有行都会返回相同的总数值,不受你取前10条的过滤条件影响。

优化后的SQL示例

SELECT *
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY breed) AS row_number,
        COUNT(*) OVER (PARTITION BY breed) AS breed_total -- 新增字段,存储当前犬种的总记录数
    FROM dogs
) t
WHERE row_number BETWEEN 1 AND 10

说明

  • 窗口函数的执行优先级高于外层的WHERE过滤,所以子查询内的COUNT(*)统计的是每个犬种分区的全量数据行数,不会因为外层只取前10条就只统计10条
  • 如果你只需要特定犬种比如Staffies的总数量,直接在结果里筛选该犬种的任意一行,取breed_total字段的值即可,也可以单独执行下面的SQL快速查询:
SELECT COUNT(*) FROM dogs WHERE breed = 'Staffies'
  • 相比你原来的子查询JOIN写法,上面的单表子查询写法省去了JOIN操作,执行效率更高,语法也更简洁。

内容的提问来源于stack exchange,提问作者baash05

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:45:04