我使用下面的查询来计算一行中的两个不同值,并且它运行得很好。
寻求您的帮助,了解如何进行查询,以百分比值显示输出
查询是
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;
请注意,您当前的示例数据有问题,但这似乎与您正在尝试的操作一致。此外,如果没有子查询,我们本可以编写上面的内容,但阅读起来会困难得多。如果性能是您非常关心的问题,我们也可以给出一个没有子查询的版本。