mysql - MySql 选择总和并计算每列的百分比
问题描述
在选择之后,我得到按 id 分组的总和,我还需要计算每个总和相对于总数的百分比
MySQL 表如下所示
|status|a|b1|b2|c1|c2|
-------------------------
|IMMA |1|0 |0 |1 |0 |
|IMMA |0|1 |1 |0 |1 |
|IMMA |1|1 |1 |0 |1 |
|IMMA |1|1 |1 |0 |1 |
我现在使用的查询是
SELECT imma_dbase_full.`status`,
SUM(imma_dbase_full.`a`) as `A`,
SUM(imma_dbase_full.`b1`) + SUM(imma_dbase_full.`b2`) as `B`,
SUM(imma_dbase_full.`c1`) + SUM(imma_dbase_full.`c2`) as `C`
FROM imma_dbase_full
WHERE imma_dbase_full.`status` = 'IMMA'
GROUP BY imma_dbase_full.`status`;
输出是
|status|A|B|C|
----------------
|IMMA |3|6|3|
但是我需要创建如下输出:
|status|A |B |C |
--------------------
|IMMA |3 |6 |3 |
|% |25%|50%|25%|
MySQL有可能吗?
解决方案
可以在单独的 SELECT 然后 UNION 中进行计算,使其显示为一个,但这不是一个很好的解决方案。为了优化,最好在应用程序级别计算百分比。
SELECT `status`,
SUM(`a`) as `A`,
SUM(`b1`+`b2`) as `B`,
SUM(`c1`+`c2`) as `C`
FROM imma_dbase_full
WHERE `status` = 'IMMA'
UNION
SELECT '%',
SUM(`a`) / SUM(`a`+`b1`+`b2`+`c1`+`c2`) * 100,
SUM(`b1`+`b2`) / SUM(`a`+`b1`+`b2`+`c1`+`c2`) * 100,
SUM(`c1`+`c2`) / SUM(`a`+`b1`+`b2`+`c1`+`c2`) * 100
FROM imma_dbase_full
WHERE `status` = 'IMMA'
Ps.:在您的原始查询中GROUP BY
没有意义,因为您正在过滤Status=IMMA
所以只有一个状态,不需要分组。
推荐阅读
- sql - 每个 GROUP BY 表达式必须至少包含
- php - 如何回显正确的日期格式
- java - Pact-jvm - 使用正则表达式验证数组内的字符串值
- c# - 使用 Entity Framework 对 ASP.NET Core 应用程序中的远程用户进行 Windows 身份验证
- azure - 使用 azure 数据工厂从 http 站点解压缩多个文件
- php - 需要每天刷新缓存 Magento 1.9
- mysql - 计算比时间戳更早的元素,同时在数据集中具有相同的时间戳
- python - 具有循环附加和切片的可变长度
- actions-on-google - 是否可以根据日期和时间调用动作?
- python - 将文件作为字典返回