MySQL'union all'没有为第二个select语句带回信息

时间:2015-01-11 15:49:38

标签: mysql union

编辑:UNION和UNION ALL具有相同的结果。

我有以下声明 - 我曾假设这会带回以下列

我意识到我要从同一张桌子向UNION询问,那有关系吗?我需要带回'hotel_name,company,hotel_1和q351'的数据 - 这可能吗?

hotel_name,company,hotel_1和q351

(SELECT hotel_name, company, 
((AVG (q1) + AVG(q2) + AVG(q3) + AVG(q4) + AVG(q5) + AVG(q6) + AVG(q7) + AVG(q8) + AVG(q9) + AVG(q10) + AVG(q11) + AVG(q12) + AVG(q13) + AVG(q14) + AVG(q15) + AVG(q16) + AVG(q17) + AVG(q18) + AVG(q19) + AVG(q20) + AVG(q21) + AVG(q22) + AVG(q23)+ AVG(q24)+ AVG(q25) ) / 25 ) AS hotel_1
FROM thotels_respondents 
LEFT JOIN thotels_results_new ON thotels_respondents.login_id = thotels_results_new.company AND thotels_results_new.sdate = 'NOV2014' 
WHERE thotels_respondents.brand = 'ACME' AND thotels_respondents.sdate = 'NOV2014' AND completion_status = 'Not Started' 
GROUP BY hotel_name 
ORDER BY hotel_name)
UNION ALL
(SELECT hotel_name, company, 
((AVG (q1) + AVG(q2) + AVG(q3) + AVG(q4) + AVG(q5) + AVG(q6) + AVG(q7) + AVG(q8) + AVG(q9) + AVG(q10) + AVG(q11) + AVG(q12) + AVG(q13) + AVG(q14) + AVG(q15) + AVG(q16) + AVG(q17) + AVG(q18) + AVG(q19) + AVG(q20) + AVG(q21) + AVG(q22) + AVG(q23)+ AVG(q24)+ AVG(q25) ) / 25 ) AS q351
FROM thotels_respondents 
LEFT JOIN thotels_results_new ON thotels_respondents.login_id = thotels_results_new.company AND thotels_results_new.sdate = 'NOV2014' 
WHERE q35 = 1 AND thotels_respondents.brand = 'ACME' AND thotels_respondents.sdate = 'NOV2014' AND completion_status = 'Not Started' 
GROUP BY hotel_name 
ORDER BY hotel_name)

但实际上,它只会带回数据:

hotel_name,company,hotel_1

缺少q351

我只能猜测我正在使用UNION ALL - 有人能指出我哪里错了吗?

1 个答案:

答案 0 :(得分:1)

在聚合函数

中移动WHERE中的不同条件
SELECT hotel_name, company, 
((AVG (q1) + AVG(q2) + AVG(q3) + AVG(q4) + AVG(q5) + AVG(q6) + AVG(q7) + AVG(q8) + AVG(q9) + AVG(q10) + AVG(q11) + AVG(q12) + AVG(q13) + AVG(q14) + AVG(q15) + AVG(q16) + AVG(q17) + AVG(q18) + AVG(q19) + AVG(q20) + AVG(q21) + AVG(q22) + AVG(q23)+ AVG(q24)+ AVG(q25) ) / 25 ) AS hotel_1,
((AVG (CASE WHEN q35 = 1 THEN  q1 END) + AVG(CASE WHEN q35 = 1 THEN  q2 END) + AVG(CASE WHEN q35 = 1 THEN  q3 END) + AVG(CASE WHEN q35 = 1 THEN  q4 END) + AVG(CASE WHEN q35 = 1 THEN  q5 END) + AVG(CASE WHEN q35 = 1 THEN  q6 END) + AVG(CASE WHEN q35 = 1 THEN  q7 END) + AVG(CASE WHEN q35 = 1 THEN  q8 END) + AVG(CASE WHEN q35 = 1 THEN  q9 END) + AVG(CASE WHEN q35 = 1 THEN  q10 END) + AVG(CASE WHEN q35 = 1 THEN  q11 END) + AVG(CASE WHEN q35 = 1 THEN  q12 END) + AVG(CASE WHEN q35 = 1 THEN  q13 END) + AVG(CASE WHEN q35 = 1 THEN  q14 END) + AVG(CASE WHEN q35 = 1 THEN  q15 END) + AVG(CASE WHEN q35 = 1 THEN  q16 END) + AVG(CASE WHEN q35 = 1 THEN  q17 END) + AVG(CASE WHEN q35 = 1 THEN  q18 END) + AVG(CASE WHEN q35 = 1 THEN  q19 END) + AVG(CASE WHEN q35 = 1 THEN  q20 END) + AVG(CASE WHEN q35 = 1 THEN  q21 END) + AVG(CASE WHEN q35 = 1 THEN  q22 END) + AVG(CASE WHEN q35 = 1 THEN  q23 END)+ AVG(CASE WHEN q35 = 1 THEN  q24 END)+ AVG(CASE WHEN q35 = 1 THEN  q25 END) ) / 25 ) AS q351
FROM thotels_respondents 
LEFT JOIN thotels_results_new ON thotels_respondents.login_id = thotels_results_new.company AND thotels_results_new.sdate = 'NOV2014' 
WHERE thotels_respondents.brand = 'ACME' AND thotels_respondents.sdate = 'NOV2014' AND completion_status = 'Not Started' 
GROUP BY hotel_name 
ORDER BY hotel_name