我有以下MySQL代码:
工作查询
SELECT name, AVG(q1) AS avg
FROM respondents
LEFT JOIN results_new ON respondents.login_id = results_new.company
WHERE respondents.brand = 'ABC'
AND results_new.sdate = 'MAY2014'
GROUP BY name
ORDER BY avg
DESC
以上工作正常,它会返回35行并正确显示名称和平均值。
非工作查询
SELECT name, AVG(q1) AS avg
FROM respondents
LEFT JOIN results_new ON respondents.login_id = results_new.company
WHERE respondents.brand = 'ABC'
AND results_new.sdate = 'NOV2014'
GROUP BY name
ORDER BY avg
DESC
以上返回zero
结果 - 这是正确的,因为表中没有数据为'NOV2014&#39}。
但是,我预计会发生的是查询返回35行,每个名称旁边都有name
和NULL
。很明显,我认为我的JOIN
不正确,但我无法解决我出错的地方。
欢迎任何和所有建议。
答案 0 :(得分:5)
您的where
子句会将您的left join
变为inner join
,因为您会对联接表中的数据进行过滤。将此条件放在您的联接的on
子句中。
SELECT name, AVG(q1) AS avg
FROM respondents
LEFT JOIN results_new ON respondents.login_id = results_new.company
AND results_new.sdate = 'NOV2014'
WHERE respondents.brand = 'ABC'
GROUP BY hotel_name
ORDER BY avg DESC