Общее количество из нескольких таблиц - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть 3 таблицы (ticket1, ticket2, ticket3), которые содержат одно и то же поле:

ticket1:       ticket2:        ticket2:
========       ========        ========
ticket_id      ticket_id       ticket_id
status         status          status

И мой запрос выглядит так:

("SELECT (SELECT COUNT( * ) FROM `ticket1` WHERE `status` =9) AS done,
                        (SELECT COUNT( * ) FROM `ticket1` WHERE `status` =10) AS Incomplete,
                        (SELECT COUNT( * ) FROM `ticket1` WHERE `status` =2) AS New")

Это для подсчета билетов ифильтр по статусу.

enter image description here

И мой вопрос: как я могу подсчитать все тикеты в общее количество выполненных, неполных и новых по тикетам 1, тикет 2, тикет 3.

Помогите, ребята, спасибо ..

Ответы [ 4 ]

0 голосов
/ 09 февраля 2019

Я бы посоветовал:

select sum(case when status = 9 then cnt else 0 end) as done,
       sum(case when status = 10 then cnt else 0 end) as incomplete,
       sum(case when status = 2 then cnt else 0 end) as new
from ((select status, count(*) as cnt from ticket1 group by status
      ) union all
      (select status, count(*) as cnt from ticket2 group by status
      ) union all
      (select status, count(*) as cnt from ticket3 group by status
      ) 
     ) t;

Или, возможно, вы захотите поместить значения в отдельные строки, используя group by.

Если производительность является проблемой, и у вас много других заявокстатусы (или, более конкретно, множество строк с различными статусами), тогда where status in (2, 9, 10) в каждом из подзапросов может помочь.

0 голосов
/ 09 февраля 2019

Вы можете выбрать из объединения все

select  sum(case when status =  9 then  1 else 0 end)  done,
        sum(case when status =  10 then  1 else 0 end)  Incomplete,
        sum(case when status =  2 then  1 else 0 end)  New,  
        sum(case when status  in (9,10,2)  then  1 else 0 end)  deon_incomplete_new,               
        count(*)   tot  
from (
      select ticket_id, status  from ticket1
      union all  
      select ticket_id, status  from ticket2
      union all  
      select ticket_id, status  from ticket2
 ) t  
0 голосов
/ 09 февраля 2019

Полагаю, имя 3d-таблицы ticket3, верно?

SELECT 
  (SELECT COUNT(*) FROM `ticket1` WHERE `status` = 9) +
  (SELECT COUNT(*) FROM `ticket2` WHERE `status` = 9) + 
  (SELECT COUNT(*) FROM `ticket3` WHERE `status` = 9) AS TotalDone,
  (SELECT COUNT(*) FROM `ticket1` WHERE `status` = 10) +
  (SELECT COUNT(*) FROM `ticket2` WHERE `status` = 10) + 
  (SELECT COUNT(*) FROM `ticket3` WHERE `status` = 10) AS TotalIncomplete,
  (SELECT COUNT(*) FROM `ticket1` WHERE `status` = 2) +
  (SELECT COUNT(*) FROM `ticket2` WHERE `status` = 2) + 
  (SELECT COUNT(*) FROM `ticket3` WHERE `status` = 2) AS TotalNew
0 голосов
/ 09 февраля 2019

Попробуйте.

select status, count(1) from 
(select * from ticket1
union all
select * from ticket2
union all
select * from ticket3) group by status;

Дайте мне знать, если у вас возникнут какие-либо вопросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...