从多个表中总计

时间:2019-02-04 07:06:26

标签: mysql sql database database-design count

我有一个列表表,基本上每个部分都包含相同的字段。

- p_ticket1_m_site_data   |  - p_ticket1_ticket  |  - p_ticket1_last_row
- p_ticket2_m_site_data   |  - p_ticket2_ticket  |  - p_ticket2_last_row
- p_ticket3_m_site_data   |  - p_ticket3_ticket  |  - p_ticket3_last_row

我可以对每个表分别计数:

SELECT COUNT( * ) AS tot_sites, IFNULL( COUNT( 
            CASE WHEN p_ticket1_m_site_data.m_date_target = DATE( NOW( ) ) 
            THEN 1 
            ELSE NULL 
            END ),0) AS todays_target, IFNULL( COUNT( 
            CASE WHEN (
            p_ticket1_m_site_data.m_date_target = DATE( NOW( ) ) 
            AND p_ticket1_ticket.t_status =9 ) 
            THEN 1 
            ELSE NULL 
            END ),0
            ) AS todays_achieve, IFNULL( COUNT( 
            CASE WHEN p_ticket1_ticket.t_status =9
            THEN 1 
            ELSE NULL 
            END ),0 ) AS tot_in
            FROM p_ticket1_m_site_data
            LEFT JOIN p_ticket1_last_row ON p_ticket1_last_row.t_m_id = p_ticket1_m_site_data.m_id
            AND p_ticket1_last_row.t_req_type = '04_int_finish_ack'
            LEFT JOIN p_ticket1_ticket ON p_ticket1_ticket.t_id = p_ticket1_last_row.t_id
            WHERE p_ticket1_m_site_data.m_status =1

enter image description here

如果我要计算ticket1,ticket2,ticket3中的所有网站总数,该怎么办?

请帮助我,谢谢。 。

示例使用UNION ALL:

enter image description here

我只是在上面的代码中为工单1和工单2使用UNION ALL,但这不是我想要的。 我的期望输出是计数所有票证表,因此视图是tot_sites(来自所有票证),todays_target(来自所有票证),todays_achieve(来自所有票证)和tot_in(来自所有票证)

2 个答案:

答案 0 :(得分:0)

如果您确定表具有相同的列,则应将UNION ALL与CTE一起使用

WITH CTE AS (

SELECT *
FROM p_ticket1_m_site_data
UNION ALL 
SELECT *
FROM p_ticket2_m_site_data
UNION ALL
...

)
SELECT COUNT(*), ...
FROM CTE
WHERE CTE.m_status = 1

CTE UNION ALL

答案 1 :(得分:0)

您可以在子查询中合并三组表,然后在主查询中进行计数,这在主体中类似

.html

可以整理一下。如果这对您不起作用,请添加示例数据和3个表的预期输出作为问题的文本,我将进行审查。