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

PostgreSQL按ID分组统计记录并展示对应最大年份

PostgreSQL数据分组统计问题

原始数据表

idyear
12014
102015
102019
1022015
1022019
1042015
1042017
1042019
1042021

期望输出

注:你给出的期望输出中id=10的max year写为2017,这与原始数据不符,原始数据里id=10的最大年份是2019,以下是修正后的正确期望输出:

idyearmax yearcount
1201420141
10201520192
10201920192
102201520192
102201920192
104201520214
104201720214
104201920214
104202120214

错误SQL分析

你尝试的SQL存在以下问题:

  • 子查询中将MAX(year)命名为year,与原表字段重名,导致字段混淆
  • 错误使用FULL JOIN且引用了不存在的table2,实际只需操作单张表
  • 未采用正确的统计方式,无法在保留原始记录的同时计算分组统计值

修正后的SQL

SELECT 
    id,
    year,
    MAX(year) OVER (PARTITION BY id) AS "max year",
    COUNT(*) OVER (PARTITION BY id) AS count
FROM your_table_name;

将your_table_name替换为你的实际表名即可。

原理说明

使用PostgreSQL的窗口函数OVER (PARTITION BY id),按id分组后:

  • MAX(year) OVER (...)计算每个id分组的最大年份,填充到该分组的每条记录中
  • COUNT(*) OVER (...)统计每个id分组的记录总数,同样填充到每条记录中
  • 该方式无需额外关联表,直接在原表上完成计算,保留所有原始记录的同时得到分组统计值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:31:14