SQL查找每个区域中每位学生的平均公斤数

时间:2017-03-22 12:55:37

标签: mysql sql

我有三张桌子

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)中的学生,然后我总结公斤和学生分配?

2 个答案:

答案 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。