Рассчитать процент SQL-оператора с данными из того же столбца - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь рассчитать процент.Формула расчета должна быть следующей:

% = (Общее время AAN / (Общее время AAN + общее время UIT)) * 100

Таблица выглядит следующим образом:

+------------+-------------+
| 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)

Ожидаемый результат из таблицы выше должен быть 51, 05%.

Ответы [ 4 ]

0 голосов
/ 13 июня 2019

Мне нравится делать это, используя avg():

select avg( data_waarde = 'ANN') * 100 as percent
from iot_data
where data_soort in ('UIT', 'AAN');
0 голосов
/ 13 июня 2019

try:

select `DATA_WAARDE`*100/SUM(`DATA_WAARDE`) OVER(PARTITION BY 1) from `IOT_DATA` WHERE (`DATA_SOORT`="UIT" OR `DATA_SOORT`="AAN")

Вы также можете инкапсулировать его в другой запрос, который возвращает только AAN

0 голосов
/ 13 июня 2019
SELECT SUM(IF(DATA_SOORT='AAN', `DATA_WAARDE`, NULL))
/ SUM(`DATA_WAARDE`) * 100
FROM `IOT_DATA` 
WHERE `DATA_SOORT` IN ('UIT', 'AAN')
  • посмотреть, как он работает вживую в sqlfiddle
0 голосов
/ 13 июня 2019

Просто используйте 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)
...