Mysql 使用union all仅返回单个值联接了两个查询?

Mysql 使用union all仅返回单个值联接了两个查询?,mysql,union,union-all,Mysql,Union,Union All,我合并了两个查询,其中返回3列month、count和targets 通过分别执行这两个查询,它将返回2条正确的记录。 但所有的联合都只返回一个值: 我的问题是: select s.month,COALESCE(max(s.count), NULL, 0) as count, COALESCE(max(s.targets), NULL, 0) as target from (SELECT MONTHNAME(tm.meeting_date) as month, count(DISTINCT t

我合并了两个查询,其中返回3列month、count和targets 通过分别执行这两个查询,它将返回2条正确的记录。 但所有的联合都只返回一个值:

我的问题是:

select s.month,COALESCE(max(s.count), NULL, 0) as count, COALESCE(max(s.targets), NULL, 0) as target from 
(SELECT MONTHNAME(tm.meeting_date) as month, count(DISTINCT tm.meeting_id) as count, NULL as targets 
FROM tig as t 
left join tig_meeting as tm ON t.tig_code = tm.tig_code 
WHERE tm.meeting_date IS NOT NULL AND tm.meeting_date != 0 AND t.school_district = 'Islamabad C3' 
AND (tm.meeting_date BETWEEN "2018-07-01" AND "2018-09-30") AND tm.key_support <> 'QuarterlyTigMeetings' AND tm.key_support <> 'QTIG_by_SSA' 
AND tm.key_support <> 'MTIG_by_SSA' AND tm.meeting_no NOT LIKE '%RF' 
GROUP BY MONTH(tm.meeting_date) 
UNION ALL 
SELECT mpt.month, NULL as count, SUM(mpt.monthly_target) as targets 
FROM meeting_plan_targets mpt 
LEFT JOIN meeting_plans mp ON mp.id = mpt.meeting_plan_id 
WHERE mp.district = 'Islamabad C3' AND mp.module_title = 1 AND mp.year = 2018 AND mp.quarter = "Quarter 4" GROUP BY mpt.month) s 
group by MONTH(s.month)
参考请查看附件中的图片

你可以在下面试试

select s.`month`,COALESCE(max(s.count),0) as count, COALESCE(max(s.targets),0) as target from 
(
SELECT MONTHNAME(tm.meeting_date) as `month`,MONTH(tm.meeting_date) as monnum,count(DISTINCT tm.meeting_id) as count, NULL as targets 
FROM tig as t 
left join tig_meeting as tm ON t.tig_code = tm.tig_code 
WHERE tm.meeting_date IS NOT NULL AND tm.meeting_date != 0 AND t.school_district = 'Islamabad C3' 
AND (tm.meeting_date BETWEEN '2018-07-01' AND '2018-09-30') AND tm.key_support <> 'QuarterlyTigMeetings' AND tm.key_support <> 'QTIG_by_SSA' 
AND tm.key_support <> 'MTIG_by_SSA' AND tm.meeting_no NOT LIKE '%RF' 
GROUP BY MONTHNAME(tm.meeting_date),MONTH(tm.meeting_date)

UNION ALL 

SELECT MONTHNAME(mpt.month), MONTH(mpt.month),NULL as count, SUM(mpt.monthly_target) as targets 
FROM meeting_plan_targets mpt 
LEFT JOIN meeting_plans mp ON mp.id = mpt.meeting_plan_id 
WHERE mp.district = 'Islamabad C3' AND mp.module_title = 1 AND mp.year = 2018 AND mp.quarter = 'Quarter 4' 
GROUP BY MONTHNAME(mpt.month),MONTH(mpt.month)
) s 
group by s.`month`,monnum order by monnum
s、 month是一个月的名称。MONTHs.month不起作用,因为month函数希望其参数是日期或日期时间,或者可以解析为日期或日期时间的字符串,而不是月份名称


改为使用s.month分组。

对于我们来说,在没有上下文的情况下,这是一个相当大的查询。为什么在COALESCE调用中设置NULL?@Barmar,从我的第一个查询中没有目标列,而在第二个查询中没有计数列。这就是为什么我使用null。现在又遇到了另一个问题。月份在图表中以描述顺序显示???我的意思是为什么要写COALESCEmaxs.count,NULL,0而不是COALESCEmaxs.count,0?空值完全没有区别。我不是问NULL作为count,我理解为什么工会需要它。这个查询按降序给出了月份名称。e、 12月,11月,10月为什么会这样?因为它是月名,所以它会给你apphabetic,但是我编辑了答案,你现在可以检查@MuhammadKhurshidnope,现在它显示了错误的值。月份=NULL,计数=0,目标=42,八月=20,目标=0,九月=20,目标=0,月=NULL,计数=0,目标=42,八月=20,目标=0,九月=20,目标=0。为了合作,我刚刚在查询结束时按月份添加了这个订单,它成功了。谢谢@fa06