繁体   English   中英

单个查询以计数来自多个表MySQL的数据

[英]Single Query to Count Data from Multiple Table Mysql

我有包含相同字段的表,例如:

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

上面查询的输出:

在此处输入图片说明

我的问题是,如果我想从上面的3个表中总计,我该怎么办。

(例如,活动更改请求总数为18000,从p_central_ticket + p_south_ticket + p_west_ticket开始计数)等。

谢谢...

在子查询中使用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

使用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

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM