Php 我需要计算计数项目的百分比
我有两张桌子: 第一:原因Php 我需要计算计数项目的百分比,php,mysql,sql,datatable,Php,Mysql,Sql,Datatable,我有两张桌子: 第一:原因 id | title --------------------------------- 1 | Customer didn't like it 2 | Needs improving 3 | Wrong format 第二:项目 id | title | rejected ------------------------------------ 1 | P
id | title
---------------------------------
1 | Customer didn't like it
2 | Needs improving
3 | Wrong format
第二:项目
id | title | rejected
------------------------------------
1 | Priject 1 | Null
2 | Priject 2 | 1
3 | Priject 3 | 1
4 | Priject 4 | Null
5 | Priject 5 | 2
我需要显示原因。标题和项目的数量拒绝了这个原因。我已经用这个代码把这些表连接在一起了
SELECT reasons.title as title, count(*) as num
FROM reasons
LEFT JOIN reasons on projects.rejected = reasons.id
WHERE projects.rejectedIS NOT NULL
GROUP BY projects.rejected
现在我需要添加百分比,所以我的最终表格如下所示
title | num | percentage
--------------------------------------------------
Customer didn't like it | 2 | 66,6
Needs improving | 1 | 33,3
百分比的格式当然不重要。
我想用MySql来完成这项工作,所以我不需要使用两个查询和额外的PHP,但是如果有另一个解决方案,除了MySql,我愿意接受建议您可以通过在
from
子句中获取总数来完成:
SELECT r.title as title, count(*) as num,
COUNT(*) / pp.cnt as ratio
FROM reasons r JOIN
projects p
ON p.rejected = r.id CROSS JOIN
(SELECT COUNT(*) as cnt FROM projects p WHERE rejects IS NOT NULL) pp
GROUP BY r.title, pp.cnt;
注:
- 这将修复表名,因此查询有一个
表projects
- 这将删除
,因为不需要它,其中
- 这会将
更改为内部联接左联接
中的总数来完成此操作:
SELECT r.title as title, count(*) as num,
COUNT(*) / pp.cnt as ratio
FROM reasons r JOIN
projects p
ON p.rejected = r.id CROSS JOIN
(SELECT COUNT(*) as cnt FROM projects p WHERE rejects IS NOT NULL) pp
GROUP BY r.title, pp.cnt;
注:
- 这将修复表名,因此查询有一个
projects
表
- 这将删除
,其中
,因为不需要它
- 这会将
左联接
更改为内部联接
您没有加入项目
表。您的意思是左加入项目
?您没有加入项目
表。你的意思是说left join projects
?需要将count(*)
更改为count(projects.id)
,否则即使没有匹配项,也要计算1行。需要将count(*)
更改为count(projects.id)
,否则即使没有匹配项,也要计算1行。