【发布时间】:2011-09-20 18:39:38
【问题描述】:
如何获得连接这四个表的查询,并给出平均值?
Table1:
TeamId | TeamName
1 | TA
2 | TB
3 | TC
Table2:
YearsId | Years
1 | 2009-2010
2 | 2010-2011
3 | 2011-2012
Table3:
MonthsId | Month
1 | July
2 | Aug
3 | Sept
Table4:
TeamId | MonthsId | YearsId | TeamWinCount
1 | 1 | 2 | 44
1 | 1 | 3 | 11
1 | 2 | 2 | 0
1 | 12 | 3 | 13
2 | 1 | 2 | 33
我希望得到如下所示的结果:
Year | Team | Avg (avg win count jun+aug+sept+.../12)
2009-2010 | TA | 23.3
2009-2010 | TB | 18.23
2009-2010 | TC | 35.23
2010-2011 | TA | 18.23
2010-2011 | TB | 18.23
2010-2011 | TC | 18.23
如果一个月没有条目,则应计为0
以前一定有什么天才做过。我玩过加入表格,但似乎无法获得平均值的列。非常感谢任何帮助或指导!
【问题讨论】:
-
你应该发布你目前所拥有的。将 AVG 列添加到现有查询比编写整个内容更容易
-
只是一个猜测,但也许这可以作为一个起点? select year,team,average(teamwincount) from table4 natural join table 2 natural join table 1 group by team,year
-
我现有的查询并没有真正让我得到太多,只是加入所有表,但这给了我比我想要的更多的行:select * FROM table1 T1 cross join Years cross join Months inner join table4 t4 ON t1.YearsId = Years.YearsId AND t4.MonthsId = Months.MonthsId
-
@Akash:谢谢,但我不熟悉关键字“Natural”,我使用的是 MSFT SQL Server,它不是一个可用的词。另外,我不需要在某个地方使用 table3 来计算每个月的计数以获得平均值吗?
-
en.wikipedia.org/wiki/Join_%28SQL%29#Natural_join 我不确定你的等价物是什么,但只是将 where 子句中的正确列等同起来。之前没有注意到如果月份不存在,你想要一个 0。在那种情况下我的想法会失败。(这是我不需要 table3 的原因之一)
标签: sql join average calculated-columns