Получить процент возвращенных значений строки - PullRequest
1 голос
/ 10 июля 2020

Требуется получить процентное значение для каждого из «task_types». Посмотрел много примеров, но не совсем понял. Я попытался поместить приведенный ниже оператор в другой оператор SELECT, чтобы попытаться разделить, но он всегда будет иметь SQL ошибок. Есть идеи?

Вот SQL:

SELECT t.task_type, (SUM(trktm.time_end) - SUM(trktm.time_start)) as thetime
   FROM
   task as t, track_time as trktm
   WHERE
   trktm.time_start BETWEEN 1593932400 AND 1594450800
   AND
   trktm.time_end BETWEEN 1593932400 AND 1594450800
   AND
   t.user_id = 10
   GROUP BY t.task_type
   ORDER BY FIELD(t.task_type, 'Unassigned') DESC, t.task_type ASC

Вот результат:

task_type   |  thetime
- - - - - - - - - - - - - -         
Unassigned  |  1041078
Bug Fixes   |  694052
Design      |  347026

Но вот чего я пытаюсь достичь:

task_type   |  thetime   |   thepercent
- - - - - - - - - - - - - - - - - - - - -         
Unassigned  |  1041078   |   70.4
Bug Fixes   |  694052    |   19.6
Design      |  347026    |   10.0

1 Ответ

0 голосов
/ 10 июля 2020

Прямое решение: Присоединяйтесь к общему времени

SELECT taskt_type, thetime, (thetime/totaltime) * 100 as thepercent From 
  (SELECT t.task_type, (SUM(trktm.time_end) - SUM(trktm.time_start)) as thetime
     FROM
       task as t, track_time as trktm
     WHERE
       trktm.time_start BETWEEN 1593932400 AND 1594450800
     AND
       trktm.time_end BETWEEN 1593932400 AND 1594450800
     AND
      t.user_id = 10
   GROUP BY t.task_type) A
JOIN 
  (SELECT  (SUM(trktm.time_end) - SUM(trktm.time_start)) as totaltime
     FROM
       task as t, track_time as trktm
     WHERE
       trktm.time_start BETWEEN 1593932400 AND 1594450800
     AND
       trktm.time_end BETWEEN 1593932400 AND 1594450800
     AND
      t.user_id = 10
   ) B
ORDER BY FIELD(task_type, 'Unassigned') DESC, task_type ASC
...