Один запрос для подсчета данных из нескольких таблиц Mysql - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть таблицы, содержащие одно и то же поле, например:

p_central_ticket        p_south_ticket             p_west_ticket 
=====================================================================
 - t_id                  - t_id                     - t_id
 - t_req_type            - t_req_type               - t_req_type  
 - t_status              - t_status                 - t_status

И у меня есть одна таблица:

m_event_type
=============
- ev_type
- ev_activity

Мой текущий запрос:

SELECT ev_activity AS Activity, COUNT( * ) AS Total
  FROM m_event_type
LEFT JOIN p_central_ticket ON p_central_ticket.t_req_type = m_event_type.ev_type
  WHERE t_status =9
GROUP BY ev_activity

Вывод из запроса выше:

enter image description here

Мой вопрос: как мне поступить, если я хочу подсчитать из трех таблиц выше?

(Например, запрос на изменение активности всего 18000, считайте с p_central_ticket + p_south_ticket + p_west_ticket) и т. Д.

Спасибо ...

Ответы [ 3 ]

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

Вы можете использовать UNION ALL для выбора всех строк 3 таблиц

        SELECT ev_activity AS Activity, COUNT( * ) AS Total
          FROM m_event_type
        LEFT JOIN (

        select t_id, t_req_type, t_status
        from p_central_ticket 
        union all 
        select t_id, t_req_type, t_status
        from p_south_ticket
        union all 
        select t_id, t_req_type, t_status
        from p_west_ticket
        ) t ON t.t_req_type = m_event_type.ev_type
          WHERE t.t_status =9
        GROUP BY ev_activity
0 голосов
/ 14 февраля 2019

Используйте UNION ALL (чтобы избежать удаления дубликатов), затем СУММИТЕСЬ о количествах. Обратите внимание, что это также работает, если у ваших таблиц есть разные имена столбцов, вам нужно только присвоить им псевдонимы в выборке.

SELECT ev_activity AS Activity, SUM(quantity) AS Total
FROM m_event_type met
LEFT JOIN (SELECT c.t_req_type, COUNT(*) as quantity
       FROM p_central_ticket c
       WHERE c.t_status =9
       GROUP BY c.t_req_type
       UNION ALL
       SELECT s.t_req_type, COUNT(*)
       FROM p_south_ticket s
       WHERE s.t_status =9
       GROUP BY s.t_req_type
       UNION ALL
       SELECT w.t_req_type, COUNT(*)
       FROM p_west_ticket w
       WHERE w.t_status =9
       GROUP BY w.t_req_type) p ON
p.t_req_type = met.ev_type
GROUP BY ev_activity
0 голосов
/ 14 февраля 2019

Используйте union all в подзапросе, затем присоединитесь к нему:

select t1.ev_Activity, count(t1.*) as total
from m_event_type t1
LEFT JOIN 
    (
    select *
    from p_central_ticket 
    WHERE t_status =9
    union all
    select *
    from p_south_ticket 
    WHERE t_status =9
    union all
    select *
    from p_west_ticket 
    WHERE t_status =9
    ) t2
ON t2.t_req_type = t1.ev_type
GROUP BY t1.ev_activity
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...