这是我的查询:
SELECT
p.PRO_Id, p.PRO_Name,
COUNT(DISTINCT c.COM_Id) as commentCount,
COUNT(DISTINCT d.DIS_Id) AS disCount,
d.DIS_ThreadDesc,
dev.DEV_Name,
loc.LOC_Name,
d.USE_Id,
d.DIS_Date
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
LEFT JOIN developer dev ON p.DEV_Id=dev.DEV_Id
LEFT JOIN locality loc ON p.LOC_Id=loc.LOC_Id
WHERE p.PRO_Status=1
and d.DIS_Status=1
and c.COM_Status=2
GROUP BY p.PRO_Id
ORDER BY 3 desc LIMIT 3
我想得到的是 commenCount(评论总数)和 disCount(讨论总数)的总和。
我试过这样;-
sum(COUNT(DISTINCT c.COM_Id) + COUNT(DISTINCT d.DIS_Id)) AS totalResponse但没有机会。
最佳答案
您可以添加两个 COUNT
的结果:
SELECT
p.PRO_Id, p.PRO_Name,
COUNT(DISTINCT c.COM_Id) AS commentCount,
COUNT(DISTINCT d.DIS_Id) AS disCount,
COUNT(DISTINCT c.COM_Id) + COUNT(DISTINCT d.DIS_Id) AS totalResponse
d.DIS_ThreadDesc, dev.DEV_Name, loc.LOC_Name, d.USE_Id, d.DIS_Date
FROM projects p
...
或者使用子查询:
SELECT sub.*,
commentCount + disCount AS totalResponse
FROM (
SELECT
p.PRO_Id, p.PRO_Name,
COUNT(DISTINCT c.COM_Id) as commentCount,
COUNT(DISTINCT d.DIS_Id) AS disCount,
d.DIS_ThreadDesc,
dev.DEV_Name,
loc.LOC_Name,
d.USE_Id,
d.DIS_Date
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
LEFT JOIN developer dev ON p.DEV_Id=dev.DEV_Id
LEFT JOIN locality loc ON p.LOC_Id=loc.LOC_Id
WHERE p.PRO_Status=1
and d.DIS_Status=1
and c.COM_Status=2
GROUP BY p.PRO_Id
) AS sub
ORDER BY commentCount LIMIT 3
请记住,您的 SELECT
列表和 GROUP BY
不匹配。这适用于 MySQL
但不符合 ANSI
标准。您应该在两个子句中使用相同的列表,或者对 GROUP BY
中未指定的列使用聚合函数。更多信息 here .
关于php - 如何在mysql中选择不同值的计数总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34448319/