Измените запрос MySQL так, чтобы он содержал сумму столбца - PullRequest
0 голосов
/ 28 октября 2018

Хотите получить один результат, который показывает сумму столбца uptimeweightage с использованием нижеупомянутого запроса MySQL.

SELECT uptime.metricname,
       Sum(downtimesincelastbat) * weightage AS uptimeweightage
FROM   uptime
       INNER JOIN weightage
               ON weightage.metricname = uptime.metricname
WHERE  uptime.environment = "xxxxxx1"
       AND uptime.metricname NOT REGEXP "xxxxx"
       AND uptime.metricname NOT REGEXP "xxxxxx"
       AND uptime.metricname NOT REGEXP "xxxxxxx"
       AND eventtime >= From_unixtime(1540616606)
       AND eventtime <= From_unixtime(1540703006)
GROUP  BY uptime.metricname; 

Вывод вышеприведенного запроса выглядит следующим образом:

+---------------------+-----------------+
| metricname        | uptimeweightage |
+-------------------+-----------------+
| A                 |           84.00 |
| B                 |           36.00 |
| C                 |          505.20 |
| D                 |            6.00 |
| E                 |            6.00 |
+-------------------+-----------------+

Хотите увидеть один результат, как показано ниже, для которого я бы выполнил еще несколько арифметических операций.

+-----------------+
| TOTAL weightage |
+-----------------+
|          637.20 |
+-----------------+

Здесь действуют две таблицы: одна - весовая, а другая - время безотказной работы.

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

+----+---------------------------------+-----------+
| id | metricname                      | weightage |
+----+---------------------------------+-----------+
|  1 | A                               |      0.30 |
|  2 | B                               |      0.30 |
|  3 | C                               |      0.20 |
|  4 | D                               |      0.10 |
|  5 | E                               |      0.10 |
+----+---------------------------------+-----------+

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

+--------+----------------------------+---------------------------------+-------------------------+-------------+----------------------+--------+---------------------+
| id | eventtime | metricname | environment | jobduration | downtimesincelastbat | status | inserttime |
+--------+----------------------------+---------------------------------+-------------------------+-------------+----------------------+--------+---------------------+
| 1 | 2018-10-28 18:54:45.445 | A | xxxxxx1 | 37 | 0 | 1 | 2018-10-28 18:54:46 |
| 2 | 2018-10-28 18:54:44.087 | B | xxxxxx2 | 23 | 0 | 1 | 2018-10-28 18:54:45 |
| 3 | 2018-10-28 18:54:44.087 | C | xxxxxx1 | 23 | 0 | 1 | 2018-10-28 18:54:44 |
| 4 | 2018-10-28 18:54:42.428 | D | xxxxxx3 | 21 | 0 | 1 | 2018-10-28 18:54:43 |
| 5 | 2018-10-28 18:54:43.061 | E | xxxxxx2 | 24 | 0 | 1 | 2018-10-28 18:54:43 |
+--------+----------------------------+---------------------------------+-------------------------+-------------+----------------------+--------+---------------------+ 

PS: время всегда гибкое и основано на времени эпохии предоставляется внешней организацией.

1 Ответ

0 голосов
/ 28 октября 2018

Вы можете просто сделать Sum() для общего набора результатов вместо использования Group By:

SELECT 
  Sum(downtimesincelastbat * weightage) AS total_weightage 
FROM uptime 
INNER JOIN weightage ON weightage.metricname = uptime.metricname 
WHERE uptime.environment = "xxxxxx1" AND 
      uptime.metricname NOT REGEXP "xxxxx" AND 
      uptime.metricname NOT REGEXP "xxxxxx" AND 
      uptime.metricname NOT REGEXP "xxxxxxx" AND 
      eventtime >= From_unixtime(1540616606) AND 
      eventtime <= From_unixtime(1540703006)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...