编辑: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 - 有人能指出我哪里错了吗?
答案 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