首页 > 解决方案 > 使用来自同一列的数据计算百分比 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%。

标签: mysqlsqlpercentage

解决方案


只需使用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)

推荐阅读