在日常数据处理工作中,如何高效查询分组记录中的极值数据是个常见挑战。本文将通过学生成绩查询案例,分享一种简洁的SQL解决方案。

以学生成绩表为例,我们需要查询每门课程的最高分获得者。传统方法通常采用分组聚合或窗口函数,但这些方案往往较为复杂。
经过实践探索,我们发现PostgreSQL特有的DISTINCT ON语法能优雅解决这个问题。这种方案不仅代码简洁,执行效率也令人满意。
核心解决方案基于PostgreSQL的DISTINCT ON语法,其基本结构如下:
SELECT DISTINCT ON (course) stuid, course, score, examtime
FROM scores
ORDER BY course, score desc// 还可以写成SELECT DISTINCT ON (course) * FROM scores
ORDER BY course, score desc
该查询首先按课程分组,然后根据分数降序排列,最终返回每组的第一条完整记录。这种语法特点包括:
需要注意的是,该特性目前仅在PostgreSQL中测试通过,其他数据库系统的兼容性需另行验证。
通过DISTINCT ON语法,我们实现了分组极值查询的简化方案,避免了复杂的聚合操作和窗口函数,为类似数据处理需求提供了新的解决思路。
Wan2.7-Video – 阿里通义AI 视频创作及分镜生成模型
MAI-Transcribe-1 – 微软发布的语音转文字模型
GLM-5V-Turbo – 智谱AI推出的多模态大语言模型和视觉编程基座
Qwen3.6-Plus - 阿里通义推出的Agent 编程能力增强型的通用大模型
LongCat-AudioDiT – 美团推出的高保真语音生成和语音克隆模型
Wan2.7-Image – 阿里通义发布的多模态图像生成与编辑模型