如何从两个不同的 table 中获取两个字段的计数,并将来自另一个 table 的字段分组到 mysql
How to get count of two fields from two different table with grouping a field from another table in mysql
我有三个表 projects
、discussions
和 comments
。
我试过这样:
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
但它从 discussions
获取所有行并且 comments
的计数与 discussions
的计数相同。
count
计算给定参数的非 null
值的数量。您拥有的联接将为每个评论创建一行,其中 dis_id
和 com_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
我有三个表 projects
、discussions
和 comments
。
我试过这样:
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
但它从 discussions
获取所有行并且 comments
的计数与 discussions
的计数相同。
count
计算给定参数的非 null
值的数量。您拥有的联接将为每个评论创建一行,其中 dis_id
和 com_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