我有以下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
Run Code Online (Sandbox Code Playgroud)
以上工作正常,它返回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
Run Code Online (Sandbox Code Playgroud)
以上返回zero结果 - 这是正确的,因为表中没有'NOV2014'的数据.
不过,我希望发生是与返回35行查询name,并NULL在每个名字旁边.很明显,我认为我JOIN的错误,但我无法解决我出错的地方.
欢迎任何和所有建议.
由于您对连接表中的数据进行过滤,因此您的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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |