Как использовать два SQL-запроса (mysql) для вычисления среднего числа - PullRequest
0 голосов
/ 06 июня 2011

Я хочу рассчитать среднее количество повторно открытых заявок по проектам, но я не смог сделать это с помощью одного SQL-запроса. Я получил общее количество билетов:

select count(jiraissue.id) as totalTicketByProj
from jiraissue ,project
where jiraissue.project=project.id
group by project.pname;

Также я восстановил количество повторно открытых билетов:

select count(changeitem.id) as nbissueReopenByProject
from changeitem,changegroup,jiraissue,project
where changeitem.groupid=changegroup.id
and changegroup.issueid=jiraissue.id
and jiraissue.project= project.id
and changeitem.oldstring="Resolved"
and changeitem.newstring="Closed"
group by project.pname;

Но я не знаю, как рассчитать среднее количество повторно открытых билетов (nbissueReopenByProject / totalTicketByProj), используя один запрос !!

Любая идея !!

Ответы [ 2 ]

1 голос
/ 06 июня 2011
SELECT (nbissueReopenByProject / totalTicketByProj)
  FROM (SELECT project.pname, COUNT(jiraissue.id) AS totalTicketByProj
          FROM jiraissue, project
         WHERE jiraissue.project = project.id
         GROUP BY project.pname) ttbp,
       (SELECT project.pname, COUNT(changeitem.id) AS nbissueReopenByProject
          FROM changeitem, changegroup, jiraissue, project
         WHERE changeitem.groupid = changegroup.id
           AND changegroup.issueid = jiraissue.id
           AND jiraissue.project = project.id
           AND changeitem.oldstring = "Resolved"
           AND changeitem.newstring = "Closed"
         GROUP BY project.pname) nbirbp
 WHERE ttbp.pname = nbirbp.pname
0 голосов
/ 06 июня 2011

Мне пришлось преобразовать ваш запрос, чтобы использовать явные объединения, чтобы упростить формирование LEFT OUTER JOIN.

После того, как у вас появятся ЛЕВЫЕ ВНЕШНИЕ СОЕДИНЕНИЯ, вы можете обернуть СУММУ вокруг условных операторов ... (Мой код может предполагать отношения 1: 1 в определенных местах, так как ваши вопросы не содержат деталей схемы, но я доверяю это по крайней мере помогает вам двигаться к своей цели.)

SELECT
  COUNT(DISTINCT jiraissue.id)
  /
  SUM(CASE WHEN changeitem.oldstring="Resolved" and changeitem.newstring="Closed" THEN 1 ELSE 0 END)
FROM
  (
    jiraissue
  INNER JOIN
    project
      ON jiraissue.project= project.id
  )
LEFT JOIN
  (
    changeitem
  INNER JOIN
    changegroup
      ON changeitem.groupid=changegroup.id
  )
    ON changegroup.issueid=jiraissue.id
GROUP BY
  project.pname
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...