我有三张桌子
school
| id | area
| 1 | area1
| 2 | area1
| 3 | area1
| 4 | area2
class
| id | school | students |
| 1 | 1 | 2 |
| 2 | 2 | 28 |
| 3 | 3 | 22 |
| 4 | 4 | 4 |
deliveries
| id | kg | classid |
| 1 | 120 | 1 |
| 2 | 80 | 1 |
| 3 | 20 | 1 |
| 4 | 200 | 2 |
| 5 | 150 | 3 |
| 6 | 14 | 2 |
我需要总结每个地区每名学生的平均每公斤体重。
对于area1应该达到(120 + 80 + 20 + 200 + 150 + 14)/(2 + 28 + 22)= 11.23但是我无法弄清楚如何编写该查询。我想我必须使用某种子查询来首先总结一下区域1(52)中的学生,然后我总结公斤和学生分配?
答案 0 :(得分:4)
是的,您需要使用子查询来对学生求和,因为如果您使用普通联接,那么class
记录将被复制,因为{{1}中有一个类关联了多个记录} table。
子查询将计算每个区域的学生。外部查询计算每个区域的交付量。在表达式deliveries
中使用,因为每个交付记录将包含与该交付相关联的学生总数。
max(t.area_students)
答案 1 :(得分:0)
首先>根据ID加入前两个表,并按t1.area,t2.classid取t1.area,t2.classid,sum(t2.students)分组。将此结果查询另存为别名。
第二个>将上述结果与alias.classid = t3.classid上的第三个表一起加入(t3.KG)。
第三>在最顶层的Select语句中,只需执行alias1.sumColumn / alias2.sumColumn。