Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我需要计算计数项目的百分比_Php_Mysql_Sql_Datatable - Fatal编程技术网

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行。