簡體   English   中英

在MySQL中使用GROUP BY在COUNT中包含零

[英]Include zero in COUNT with GROUP BY in MySQL

我希望在MySQL中進行查詢,列出所有學院及其學生人數,並給出以下表格結構:

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`

我得到了這個結果:

查詢結果

但是我需要得到所有的院系,甚至是那些沒有注冊學生的院系。

如果我在course表中使用LEFT JOIN,我會得到相同的結果。

如果你想要所有的院系; 你的JOIN起始表應該是教師表。 然后相應地在另一個表上執行Left連接。

使用以下查詢:

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`

你需要尊重查詢,你的主要表是院系(或使用正確的聯接): 重要 - 因為你想要計算學生的案例,你需要處理可能出現的NULL值,加入學生表:

SELECT
`f`.`id`, `f`.`name`, SUM(IF(s.id IS NULL, 0,1) `total`
FROM
faculty f
LEFT JOIN course c ON `f`.`id` = `c`.`faculty_id`
LEFT JOIN student s ON `c`.`id` = `s`.`course_id`
GROUP BY `c`.`faculty_id` ORDER BY `f`.`name`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM