mysql - 使用来自同一列的数据计算百分比 SQL 语句
问题描述
我正在尝试计算百分比。计算公式应如下:
%=(总时间 AAN / (总时间 AAN + 总时间 UIT))*100
表如下所示:
+------------+-------------+
| DATA_SOORT | DATA_WAARDE |
+------------+-------------+
| TEMP | 22 |
| AAN | 14200 |
| UIT | 10200 |
| HUM | 44 |
| AAN | 10000 |
| UIT | 13000 |
| TEMP | 23 |
+------------+-------------+
来自 AAN 和 UIT 的 DATA_WAARDE 以毫秒为单位。
我试过了:
SELECT sum((((`DATA_WAARDE`/1000)
FROM `IOT_DATA`
WHERE `DATA_SOORT`="AAN")/sum(`DATA_WAARDE`/1000)
FROM `IOT_DATA`
WHERE (`DATA_SOORT`="UIT" OR `DATA_SOORT`="AAN"))*100)
上表中的预期结果应该是 51.05%。
解决方案
只需使用case when
,SQL 如下:
select * from iot_data;
data_soort | data_waarde
------------+-------------
TEMP | 22
AAN | 14200
UIT | 10200
HUM | 44
AAN | 10000
UIT | 13000
(6 rows)
select
concat(round(sum(case when data_soort='AAN' then data_waarde else null end)*100.0/sum(case when data_soort in ('AAN','UIT') then data_waarde else null end),2),'%') as percent
from
iot_data;
+---------+
| percent |
+---------+
| 51.05% |
+---------+
1 row in set (0.02 sec)
推荐阅读
- python - 从不以 .mp4 结尾的 URL 下载视频 - Python
- sql-server - 将两个查询响应存储到一个变量中
- javascript - Firebase:无法将电话号码与其他 AuthProviders javascript 链接
- java - Hibernate 和单表继承的问题
- next.js - 如何在 Next.js 中渲染 KaTex
- dafny - 在 Dafny 中删除特定索引处的元素失败
- scala - 如何使用 scalapb 在 proto 中描述 Option[FiniteDuration]
- ada - 如何在 Ada 中处理闰年
- linux - 使用 vcpkg 安装 ffmpeg
- while-loop - 如何创建生日计数器?