SQL多表JOIN查询缺失无评分公司行、LEFT JOIN不生效如何修复?
问题核心原因
你修改LEFT JOIN后不生效,是因为遗漏了GROUP BY分组子句:聚合函数AVG()默认会将所有查询结果合并为一行统计值,即使使用LEFT JOIN保留了全量公司数据,没有分组的情况下也不会按公司维度拆分统计结果。
修正后的SQL语句
SELECT company.id, company.title, COALESCE(AVG(ratings.ratings), 0) AS average_rating FROM companies company LEFT JOIN companies_ratings ratings ON ratings.company_id = company.id GROUP BY company.id, company.title
语句说明
- 替换
INNER JOIN为LEFT JOIN,保证左表companies的所有公司记录都会被保留,没有对应评分记录的公司,关联的ratings表字段值为NULL - 新增
GROUP BY company.id, company.title,按公司维度分组,确保每个公司对应一条独立的统计结果 COALESCE函数用于将没有评分的公司的平均评分从NULL转换为0,如果需要保留NULL值,直接写AVG(ratings.ratings)即可
测试结果
基于你提供的测试表数据,执行上述语句后返回结果如下:
| id | title | average_rating |
|---|---|---|
| 1 | Company 1 | 4.0 |
| 2 | Company 2 | 0 |
内容的提问来源于stack exchange,提问作者user1730273
相关产品推荐
相关产品推荐

