mysql - 在 MySQL 中使用 GROUP BY 在 COUNT 中包含零
问题描述
我希望在 MySQL 中进行查询,以列出所有院系及其学生人数,其表结构如下:
我的查询看起来像:
SELECT `f`.`id`, `f`.`name`, COUNT(*) `total`
FROM `student` `s`
INNER JOIN `course` `c` ON `c`.`id` = `s`.`course_id`
LEFT JOIN `faculty` `f` ON `f`.`id` = `c`.`faculty_id`
GROUP BY `c`.`faculty_id`
ORDER BY `f`.`name`
我得到了这个结果:
但我需要获得所有的学院,即使是那些没有注册学生的学院。
如果我对表使用 LEFT JOIN,course
我会得到相同的结果。
解决方案
如果你想要所有的院系;您的 JOIN 起始表应该是教师表。然后相应地在另一张表上进行左连接。
使用以下查询:
SELECT `f`.`id`, `f`.`name`, COUNT(`s`.`id`) AS `total`
FROM `faculty` AS `f`
LEFT JOIN `course` AS `c` ON `f`.`id` = `c`.`faculty_id`
LEFT JOIN `student` AS `s` ON `c`.`id` = `s`.`course_id`
GROUP BY `f`.`id`, `f`.`name`
ORDER BY `f`.`name`
推荐阅读
- node.js - 如何获取nodejs readline的进度或任何其他逐行读取大文件的方式?
- zsh - macOS:iTerm2:重复:“npx:--shell-auto-fallback 已删除”
- c# - 如何在 Azure VM 服务器的后端运行 VB.NET exe?
- css - MaterialUI 按钮无法覆盖样式
- wordpress - Woocommerce 在多供应商订单中获取子订单号
- angular - 如何将 HighChart 添加到 Angular?
- python - 通过 OpenCV 应用分割掩码
- mysql - Clickhouse 按顺序时间和特定类型查找事件对
- lightningchart - 为散点图设置单个大小的大小
- javascript - 等待调用后,它不会执行下一行