使用mysql查询输出中的值计算百分比



我使用下面的查询来计算一行中的两个不同值,并且它运行得很好。

寻求您的帮助,了解如何进行查询,以百分比值显示输出

查询是

SELECT `Machine`,
SUM(CASE WHEN `state` = 'UnHealthy' THEN 1 ELSE 0 END) 'Red'
, SUM(CASE WHEN `state` = 'Healthy' THEN 1 ELSE 0 END) 'Green'
, SUM(CASE WHEN `state` = 'UnHealthy' or `state` = 'Healthy' THEN 1 ELSE 0 END) 'Total'
FROM Report Where date(`TOI`) >= DATE(NOW()) - INTERVAL 7 DAY
Group by `Machine`

输出为

Machine Red Green   Total   
Node1   3   14      17  
Node2   0   3       3   
Node3   4   6       10  

我如何才能使以上结果以百分比来表示,比如低于

Machine Red Green   Total   
Node1   20% 80%      17 
Node2   25% 75%      3  
Node3   50% 50%     10   

稍后我想将其作为progressbar引导到PHP。

谢谢,

这里有一个相当整洁的编写方法。我们可以将您当前的大部分逻辑放入子查询中,然后使用条件和来生成您想要的百分比和总数。

SELECT
Machine,
100.0 * Red / (Red + Green) AS Red,
100.0 * Green / (Red + Green) AS Green,
Red + Green AS Total
FROM
(
SELECT
Machine,
COUNT(CASE WHEN state = 'UnHealthy' THEN 1 END) Red,
COUNT(CASE WHEN state = 'Healthy' THEN 1 END) Green
FROM Report
WHERE DATE(TOI) >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY Machine
) t
ORDER BY
Machine;

请注意,您当前的示例数据有问题,但这似乎与您正在尝试的操作一致。此外,如果没有子查询,我们本可以编写上面的内容,但阅读起来会困难得多。如果性能是您非常关心的问题,我们也可以给出一个没有子查询的版本。

最新更新