多个表上的SQL AVG函数

时间:2014-10-09 12:12:58

标签: sql average

我有两个或多或少相同的表:

test_score

id  int(11) PK AI
user_id int(11) 
module_id   int(11) 
score   double 
number_correct  int(11) 
correct_total   int(11) 
timestamp   datetime 
phase_id    int(11) 
medal_id    int(11) 
team_id int(11) 
status_id   int(11) 

id  int(11) PK AI
user_id int(11) 
module_id   int(11) 
score   double 
number_correct  int(11) 
correct_total   int(11) 
timestamp   datetime 
phase_id    int(11) 
medal_id    int(11) 
team_id int(11) 
status_id   int(11) 

现在这两者完全相同的原因是它们包含来自我系统中每个组件的数据。

现在我想使用AVG()函数来查找这两个表的平均分数。

这可能吗?

2 个答案:

答案 0 :(得分:5)

SELECT user_id, average_score = AVG(score)
FROM (
    SELECT user_id, score FROM test_score1
    UNION ALL
    SELECT user_id, score FROM test_score2
) AS subquery
GROUP BY user_id

答案 1 :(得分:3)

不再考虑表格,而是"结果集"。

将问题分解为两个部分..

首先,我如何创建一个"结果集"从这两个表中我想要的数据? 最简单的解决方案,联合声明

select * from <table1>
union
select * from <table2>

现在,取上面的结果集并计算平均值

select xx.module_id,avg(xx.score) as AvgModuleScore
from
(
    select * from <table1>
    union
    select * from <table2>
) xx