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

mkshixfv  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(413)

我使用下面的查询来计算一行中的两个不同的值,它工作得非常好。
寻求您的帮助,以找到如何使查询以百分比值显示输出
查询是

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。
谢谢,

isr3a4wc

isr3a4wc1#

这是一个相当整洁的写作方法。我们可以将当前的大部分逻辑放入子查询中,然后使用条件和生成所需的百分比和总和。

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;

请注意,您当前的示例数据有一个问题,但这似乎与您正在尝试做的事情是一致的。另外,我们可以在没有子查询的情况下编写上面的内容,但是阅读起来要困难得多。如果性能是您的一个大问题,我们也可以给出一个没有子查询的版本。

相关问题