2017-06-27 49 views
3

我正在使用sqlite数据库。 该表为:使用sqlite的行平均数

ID_TABLE   POINTS_A_TABLE  POINTS_B_TABLE 
    id number  id_a points_a  id_a points_a 
--------------  ----------------  ---------------- 
smith 1   smith  11    ... 
gordon 22  gordon 11 
butch 3   butch  11 
sparrow 25  sparrow 
white 76  white  46 

等等。这些命令

select id, 
    points_a_table.points_a, points_b_table.points_a, points_c_table.points_a, points_d_table.points_a 
from id_table 
left join points_a_table on points_a_table.id_a = id_table.id 
left join points_b_table on points_b_table.id_a = id_table.id 
left join points_c_table on points_c_table.id_a = id_table.id 
left join points_d_table on points_d_table.id_a = id_table.id 
group by id 

后,我得到了这样的结果,每行我有ID和与ID相关联的点。现在

enter image description here

我想用行得到平均分,按降序排列的平均水平。 我要的是:

sparrow| 56 [(44+68)/2] 
white | 41 ([46+67+11)/3]  
smith | 33 [(11+25+65)/3] 
butch | 24 [(11+26+11)/3] 
gordon | 11 [11/1] 

我怎么能这样做? 谢谢。

回答

2

如果斯马什都指向表一起,你就可以简单地计算平均每个组:

SELECT id, 
     avg(points_a) 
FROM (SELECT id_a AS id, points_a FROM points_a_table 
     UNION ALL 
     SELECT id_a AS id, points_a FROM points_b_table 
     UNION ALL 
     SELECT id_a AS id, points_a FROM points_c_table 
     UNION ALL 
     SELECT id_a AS id, points_a FROM points_d_table) 
GROUP BY id 
ORDER BY avg(points_a) DESC; 
+0

太感谢你了 – Ford1892

+0

对不起,还有一个问题: 执行你的代码后,如果我想将结果列'id'与'ID_TABLE'中相应的'number'匹配,我该怎么做? 结果应该是: '25 | 56' '76 | 41' '1 | 33' 等等,谢谢。 – Ford1892

+0

这将是一个不同的问题。 (这可以通过左连接来解决。) –