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

如何在SQL中通过创建唯一键筛选仅选修单门课程的学生?

筛选仅选修单门选修课的学生学号

示例需求:获取仅选修单门选修课的学生学号(对应示例输出为符合条件的学生记录)

你不需要通过拼接列来实现这个需求,直接按roll_number分组统计选课数量,再筛选数量为1的即可。以下是两种可行的方案:

方案1:分组统计直接筛选

先按学号分组,统计每个学生的选修课数量,再通过HAVING子句筛选出仅选1门课的学生:

SELECT roll_number
FROM student
WHERE time BETWEEN '2023-03-12' AND '2023-03-13'
GROUP BY roll_number
HAVING COUNT(DISTINCT optional_subject) = 1;

注:如果同一个学生不会重复选同一门选修课,可以去掉DISTINCT,简化为COUNT(optional_subject) = 1。

方案2:窗口函数保留选课信息

如果需要同时获取学生的学号和对应的选修课名称,可以用窗口函数先统计每个学生的选课总数,再筛选出总数为1的记录:

SELECT roll_number, optional_subject
FROM (
    SELECT 
        roll_number, 
        optional_subject,
        COUNT(optional_subject) OVER (PARTITION BY roll_number) AS subject_count
    FROM student
    WHERE time BETWEEN '2023-03-12' AND '2023-03-13'
) AS student_subjects
WHERE subject_count = 1;

对原查询的说明

原查询中按roll_number和optional_subject分组、拼接列生成key的操作,无法帮你统计每个学生的总选课数,对于当前需求来说是多余的。直接通过分组统计或窗口函数就能高效实现筛选目标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:19