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

PostgreSQL中PARTITION BY与COUNT函数返回值不一致问题咨询

问题分析与解决:PostgreSQL中COUNT与PARTITION BY混用返回值异常

错误原因

你的SQL语句存在执行顺序和用法混淆的问题:

  1. 执行顺序优先级:PostgreSQL会先执行GROUP BY name,这一步已经将原表按name分组,每组仅保留1行聚合后的数据(比如Boy组只剩1行,Girl组只剩1行)。
  2. 窗口函数的作用范围:后续的窗口函数count(name) OVER (PARTITION BY name)是在GROUP BY处理后的数据集上执行的,此时每个分区(Boy/Girl)内只有1行数据,因此count的结果必然是1。
  3. 多余的DISTINCT:GROUP BY已经保证了name的唯一性,DISTINCT在这里没有意义。

正确用法示例

场景1:查看每条原始记录对应的分组总计数

不需要GROUP BY,直接用窗口函数即可:

SELECT name, count(name) OVER (PARTITION BY name) AS group_count
FROM sex;

返回结果:

namegroup_count
Boy3
Boy3
Boy3
Girl1

场景2:获取去重后的name及对应计数

有两种等价写法:

  • 用GROUP BY(你最初的正确写法):
SELECT name, count(name) AS group_count
FROM sex
GROUP BY name;
  • 用窗口函数+DISTINCT(无需GROUP BY):
SELECT DISTINCT name, count(name) OVER (PARTITION BY name) AS group_count
FROM sex;

两种写法都会返回:

namegroup_count
Boy3
Girl1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:31:03