如何关联一对多关系表并按技能类型聚合多列计算平均值?
解决按技能类型计算候选人平均评分的问题
嘿,我来帮你搞定这个需求!你已经成功关联了interviews和ratings表,接下来只需要用条件聚合就能实现按技能类型拆分平均分的效果啦。
正确的SQL语句
SELECT i.Candidate, AVG(CASE WHEN r.skill_type = 'Required' THEN r.rating END) AS `Required Rating`, AVG(CASE WHEN r.skill_type = 'Optional' THEN r.rating END) AS `Optional Rating` FROM interviews i INNER JOIN ratings r ON r.interview_id = i.interview_id GROUP BY i.Candidate;
逻辑解释
- 用
INNER JOIN替代了你之前的隐式连接(逗号写法),这是更规范的SQL写法,可读性更强 CASE WHEN语句会针对每条记录判断技能类型:- 如果是
Required,就返回对应的评分,否则返回NULL - 如果是
Optional,就返回对应的评分,否则返回NULL
- 如果是
AVG()函数会自动忽略NULL值,所以它只会计算对应技能类型下的评分平均值GROUP BY i.Candidate保证我们是按每个候选人维度来聚合计算的
预期输出结果
| Candidate | Required Rating | Optional Rating |
|---|---|---|
| Ram | 4.0 | 3.5 |
| Rahim | 4.5 | 1.5 |
内容的提问来源于stack exchange,提问作者kishore
相关产品推荐
相关产品推荐

