SELECT p.id, p.name, ...
FROM programmes p
LEFT OUTER JOIN notes n
ON (n.id_prgm=p.id AND ...)
WHERE ...
GROUP BY p.id WITH ROLLUP
您将获得每个程序的计数,然后是 NULL、TOTAL COUNT 行。此外,请注意以下事项:
使用 ROLLUP 时,也不能使用 ORDER BY 子句对结果进行排序。换句话说,ROLLUP 和 ORDER BY 是互斥的。但是,您仍然可以控制排序顺序。MySQL 中的 GROUP BY 对结果进行排序,您可以对 GROUP BY 列表中命名的列使用显式 ASC 和 DESC 关键字来指定各个列的排序顺序。(ROLLUP 添加的更高级别的汇总行仍然出现在计算它们的行之后,无论排序顺序如何。)
如果您希望在每行中显示总计数,请通过以下方式删除组:
SELECT p.id, p.name, COUNT(*)
FROM programmes p
LEFT OUTER JOIN notes n
ON (n.id_prgm=p.id AND ...)
WHERE ...
ORDER BY ...
如果您希望为每条记录显示计数但保留分组依据,请执行以下操作:
SELECT t.*, COUNT(*) FROM (
SELECT p.id, p.name, ...
FROM programmes p
LEFT OUTER JOIN notes n
ON (n.id_prgm=p.id AND ...)
WHERE ...
GROUP BY ...
ORDER BY ...
) t
但是,子查询中不支持 limit 子句,您必须找到其他内容。
我认为您想要区分,而不是 GROUP BY。这不是一回事,不应混淆。有关更多信息,请参阅我对此问题的回答。