关联查询时仅返回课程行数并统计对应收藏学生数可行吗?
解决方案
要在保留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
相关产品推荐
相关产品推荐

