按行计算sqlite的平均值

3

我正在使用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相关联的分数。

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]

我该怎么做呢?谢谢。
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;

抱歉,还有一个问题: 在执行您的代码后,如果我想将生成的 id 列与 ID_TABLE 中对应的 number 进行匹配,我该怎么做呢?结果应该是: 25|56 76|41 1|33 等等,谢谢。 - Ford1892
那将是一个不同的问题。(可以通过左连接解决。) - CL.
我通过将上一个查询保存在新表中,并像这样连接两个表来完成它:select id_table.number, new_table_average.average from id_table join new_table_average on id_table.id=new_table_average.id order by new_table_average desc ; 是否可以不创建新表直接在答案代码后面实现? - Ford1892
这将是一个新问题。(可以通过子查询解决。) - CL.
https://stackoverflow.com/questions/44788025/combine-instructions-with-a-subquery-in-sqlite - Ford1892

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接