我有三张表。
我这样试过:

SELECT p.PRO_Name, COUNT( d.DIS_Id ) AS nofdisc, COUNT( c.COM_Id ) AS nofcom
FROM projects p
LEFT JOIN discussions d ON p.PRO_Id = d.PRO_Id
LEFT JOIN comments c ON d.DIS_Id = c.DIS_Id
GROUP BY p.PRO_Name LIMIT 0 , 30

但是它取了projects中的所有行,并且discussions的计数与comments的计数相同。

最佳答案

count统计给定参数的非-null值的数目。您拥有的连接将为每个注释创建一行,其中dis_idcom_id都不是null,因此它们的计数将相同。由于这些是id,您只需计算distinct出现次数即可获得所需的响应:
(编辑:根据评论中的请求添加一个order by子句)

SELECT    p.PRO_Name,
          COUNT(DISTINCT d.DIS_Id) AS nofdisc,
          COUNT(DISTINCT c.COM_Id) AS nofcom
FROM      projects p
LEFT JOIN discussions d ON p.PRO_Id = d.PRO_Id
LEFT JOIN comments c ON d.DIS_Id = c.DIS_Id
GROUP BY  p.PRO_Name
ORDER BY  2,3
LIMIT     0 , 30

关于mysql - 如何从两个不同的表中获取两个字段的计数,并在mysql中对另一个表中的字段进行分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31603578/

10-12 16:17