上星期面试遇到以为面试官问我一道sql题,一张学生表,一张班级表,一张中间表,统计每个班级里的人数,这个用group by也不难,问题是后面加了个问题,每个班级统计过的人不要再统计,这改的有点脱离现实,不过如果真遇到这种问题还是需要处理,当时做不出来,回来上网查了些资料,然后得出答案
SELECT c.`cname`,COUNT(1) FROM C c LEFT JOIN R r ON c.`id`=r.`cid` LEFT JOIN S s ON s.`id` = r.`sid` WHERE r.`id` IN (SELECT MIN(r.`id`) FROM R r GROUP BY r.`sid`) GROUP BY r.`cid`
R为中间表,S为学生表,C为班级表
这道题还是比较经典的,记录一下。