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

关联查询时仅返回课程行数并统计对应收藏学生数可行吗?

解决方案

要在保留100行课程数据的同时,统计每门课程的收藏学生总数,可以用以下两种常用方法:

方法1:LEFT JOIN + 聚合函数GROUP BY

通过LEFT JOIN关联学生表(确保没有收藏者的课程也能保留),再用COUNT()统计每个课程对应的学生数量,最后按课程分组:

SELECT 
    c.*,
    COUNT(st.id) AS favorite_student_count
FROM courses c
JOIN schools s ON s.id = c.school_id
LEFT JOIN students st ON st.favorite_course_id = c.id
GROUP BY c.id -- 若数据库要求分组字段需包含所有SELECT非聚合字段,需列出courses表的全部字段,如c.id, c.name, c.school_id...

注:LEFT JOIN会保留所有课程记录,即使该课程没有学生收藏,此时favorite_student_count会显示为0;如果用普通JOIN,无收藏的课程会被过滤掉。

方法2:子查询直接统计

在SELECT语句中嵌入子查询,直接针对每门课程查询其收藏学生数,无需分组:

SELECT 
    c.*,
    (SELECT COUNT(*) FROM students st WHERE st.favorite_course_id = c.id) AS favorite_student_count
FROM courses c
JOIN schools s ON s.id = c.school_id

这种写法逻辑更直观,每一行课程数据都会单独触发一次子查询计算对应收藏数,同样能保证返回100行结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:57:38