php - 我需要计算计数项目的百分比

标签 php mysql sql datatable

我有两个表:

第一:原因

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

我需要显示 Reasons.Title 以及因该原因被拒绝的项目数量。我已经设法用这段代码将这些表连接在一起

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

现在我需要添加百分比,所以我的决赛 table 看起来像这样

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 表。
  • 这将删除 WHERE,因为不需要它。
  • 这会将 LEFT JOIN 更改为内部联接。

关于php - 我需要计算计数项目的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46122731/

相关文章:

php 日期选择器 Web 浏览器

php - bind_param() 有什么作用?

mysql - SUM 并从 MySQL 中的两个表中获取 AVG,并根据它们的 DATE 使用 WHERE 子句

sql - 查询按每日显示为日期从-到分组

php - 多表SQL交叉引用搜索困难

php - 我无法在循环之外获取查询的值

php - SQL LIKE 问题,如果我想从我的 user_id 中选择 1,它会选择 1、10 和 11

java - Mysql查询插入时截断数据

sql - MySQL连接语句

mysql 查询在 phpmyadmin 中运行时有效,但在 php 中运行时返回错误