MySQL统计查询异常排查:多表关联仅返回单条结果
问题原因与解决方案
哈哈,这个问题我熟!你的SQL语句现在只返回一条结果,核心原因是没加GROUP BY子句哦~
问题根源
当你使用COUNT()这类聚合函数时,如果不指定分组条件,MySQL会把所有符合WHERE条件(这里是WHERE 1,也就是所有行)的记录当成一个整体来统计,自然就只会返回一条汇总结果。而你想要的是每个学生单独的报名次数,必须告诉数据库要按学生的唯一标识来分组统计。
修正后的SQL语句
SELECT student.id, student.session_token AS available_token, COUNT(inscription_student.id_inscription) AS nb_inscription_in_progress FROM student LEFT JOIN inscription_student ON student.id = inscription_student.id_student_join GROUP BY student.id, student.session_token;
为什么这么改?
- 用
GROUP BY student.id, student.session_token来指定分组规则:因为student.id是学生的唯一标识,每个学生对应唯一的id,而session_token是学生的属性字段,和id一起分组能保证每个学生的信息被单独统计。 - 保留
LEFT JOIN的好处是:哪怕某个学生没有报名任何课程,也会被查询出来,对应的nb_inscription_in_progress会显示为0,不会漏掉未报名的学生。
内容的提问来源于stack exchange,提问作者logobi




