我有一个列表表,基本上每个部分都包含相同的字段。
- 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
如果我要计算ticket1,ticket2,ticket3中的所有网站总数,该怎么办?
请帮助我,谢谢。 。
示例使用UNION ALL:
我只是在上面的代码中为工单1和工单2使用UNION ALL,但这不是我想要的。 我的期望输出是计数所有票证表,因此视图是tot_sites(来自所有票证),todays_target(来自所有票证),todays_achieve(来自所有票证)和tot_in(来自所有票证)
答案 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
答案 1 :(得分:0)
您可以在子查询中合并三组表,然后在主查询中进行计数,这在主体中类似
.html
可以整理一下。如果这对您不起作用,请添加示例数据和3个表的预期输出作为问题的文本,我将进行审查。