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

PostgreSQL如何查询每名学生对应的第一条成绩记录

PostgreSQL按student_id分组取每组第一条记录实现方案

方案1:使用PostgreSQL专属DISTINCT ON语法(性能最优)

这是PostgreSQL独有的优化语法,实现简单且执行效率远高于通用写法:

SELECT DISTINCT ON (student_id)
  student_id,
  math,
  chemistry,
  science
FROM 你的表名
-- ORDER BY必须把student_id放在首位,后续排序规则定义「第一条」的判定逻辑
ORDER BY student_id, ctid;

逻辑说明:DISTINCT ON (student_id) 会保留每个student_id分组下,排序后的第一条记录。示例中使用PG内置的行物理位置标识ctid来匹配你给出的示例排序,如果你表中有自增主键、记录创建时间这类字段,建议替换ctid为对应字段,顺序更稳定。


方案2:使用ROW_NUMBER窗口函数(兼容通用SQL标准)

该写法符合SQL标准,也可以直接在其他支持窗口函数的数据库中使用:

WITH ranked_score AS (
  SELECT
    *,
    -- 按student_id分组,分组内按规则排序后给行编号
    ROW_NUMBER() OVER (PARTITION BY student_id ORDER BY ctid) AS rn
  FROM 你的表名
)
SELECT
  student_id,
  math,
  chemistry,
  science
FROM ranked_score
WHERE rn = 1;

注意:关系型数据库本身没有默认的行顺序,你必须明确「第一条」的判定规则(如插入时间先后、自增ID大小等),避免查询结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:51:02