使用来自同一列的数据计算百分比 SQL 语句
Calculate percentage SQL statement in with data from the same column
我正在尝试计算百分比。计算公式如下:
%=(Totale time AAN / (Totale time AAN + totale time UIT))*100
Table 看起来像这样:
+------------+-------------+
| DATA_SOORT | DATA_WAARDE |
+------------+-------------+
| TEMP | 22 |
| AAN | 14200 |
| UIT | 10200 |
| HUM | 44 |
| AAN | 10000 |
| UIT | 13000 |
| TEMP | 23 |
+------------+-------------+
DATA_WAARDE 来自 AAN 和 UIT 以毫秒为单位。
我试过:
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)
上述 table 的预期结果应为 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)
尝试:
select `DATA_WAARDE`*100/SUM(`DATA_WAARDE`) OVER(PARTITION BY 1) from `IOT_DATA` WHERE (`DATA_SOORT`="UIT" OR `DATA_SOORT`="AAN")
你也可以将它封装到另一个查询中 returns 只是 AAN
SELECT SUM(IF(DATA_SOORT='AAN', `DATA_WAARDE`, NULL))
/ SUM(`DATA_WAARDE`) * 100
FROM `IOT_DATA`
WHERE `DATA_SOORT` IN ('UIT', 'AAN')
- 看到它在 sqlfiddle
中实时运行
我喜欢使用 avg()
:
select avg( data_waarde = 'ANN') * 100 as percent
from iot_data
where data_soort in ('UIT', 'AAN');
我正在尝试计算百分比。计算公式如下:
%=(Totale time AAN / (Totale time AAN + totale time UIT))*100
Table 看起来像这样:
+------------+-------------+
| DATA_SOORT | DATA_WAARDE |
+------------+-------------+
| TEMP | 22 |
| AAN | 14200 |
| UIT | 10200 |
| HUM | 44 |
| AAN | 10000 |
| UIT | 13000 |
| TEMP | 23 |
+------------+-------------+
DATA_WAARDE 来自 AAN 和 UIT 以毫秒为单位。
我试过:
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)
上述 table 的预期结果应为 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)
尝试:
select `DATA_WAARDE`*100/SUM(`DATA_WAARDE`) OVER(PARTITION BY 1) from `IOT_DATA` WHERE (`DATA_SOORT`="UIT" OR `DATA_SOORT`="AAN")
你也可以将它封装到另一个查询中 returns 只是 AAN
SELECT SUM(IF(DATA_SOORT='AAN', `DATA_WAARDE`, NULL))
/ SUM(`DATA_WAARDE`) * 100
FROM `IOT_DATA`
WHERE `DATA_SOORT` IN ('UIT', 'AAN')
- 看到它在 sqlfiddle 中实时运行
我喜欢使用 avg()
:
select avg( data_waarde = 'ANN') * 100 as percent
from iot_data
where data_soort in ('UIT', 'AAN');