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

如何仅用子查询查询报名人数≥10的课程?

仅用子查询实现课程报名人数统计的方案

一、仅用子查询实现需求的SQL写法

由于要求禁用GROUP BY、JOIN和集合操作,我们可以利用相关子查询逐个统计每门课程的报名人数,再筛选出人数≥10的课程:

SELECT c.name,
       (SELECT COUNT(*) 
        FROM Course_Signup csn 
        WHERE csn.course_id = c.id) AS signup_count
FROM Courses c
WHERE (SELECT COUNT(*) 
       FROM Course_Signup csn 
       WHERE csn.course_id = c.id) >= 10;

逻辑很直接:遍历Courses表的每一门课程,通过子查询匹配Course_Signup中对应课程的报名记录数,最后只保留报名人数≥10的课程信息。

二、除COUNT外的报名人数统计方法

除了COUNT函数,最实用的替代方法是用SUM函数:

SELECT c.name,
       (SELECT SUM(1) 
        FROM Course_Signup csn 
        WHERE csn.course_id = c.id) AS signup_count
FROM Courses c
WHERE (SELECT SUM(1) 
       FROM Course_Signup csn 
       WHERE csn.course_id = c.id) >= 10;

这里SUM(1)的作用是每匹配到一条报名记录就累加1,最终结果和COUNT(*)完全一致,本质都是统计符合条件的行数。

另外还有一种思路拓展性的方法(不推荐实际使用):通过子查询生成行号,取最大行号作为报名人数,但实现繁琐且效率低下,实际工作中优先用COUNT或SUM(1)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:25:17