我正在研究一些棒球统计数据,以提高数据库能力,我掌握了2017年和2018年美国职业棒球大联盟赛季击球手的数据。我希望完成的工作是平均两个赛季在蝙蝠和击球上的比赛次数。最终我想在五个赛季中做到这一点,但我认为我需要从某个地方开始。问题在于两个表的列名都完全相同。我认为我需要做一个UNION,但我不确定。
我正在使用Express版本的SSMS。 我尝试了一个简单的查询,认为这样做会有所作为,但显然,我应该知道得更多。我尝试过:
SELECT PLAYER, g, ab, hit
FROM mlb_2017, mlb_2018
WHERE mlb_2017.PLAYER = mlb_2018.PLAYER
ORDER BY PLAYER;
这是Excel文件示例。无论是2017年还是2018年,这些字段都完全如图所示,还有大约十个我尚未使用的字段。
Player Team pos g ab hit 2b
abreu,jose whit 1B 128 499 132 36
acuna,ron brav OF 111 433 127 26
adames,will rays SS 85 288 80 7
adams,lane brav OF 26 25 6 1
所以我想要的是将两个季节合计为两年,然后取平均值。
答案 0 :(得分:1)
尝试联合查询:
SELECT PLAYER, AVG(hit) AS avg_hits
FROM
(
SELECT PLAYER, hit
FROM mlb_2017
UNION ALL
SELECT PLAYER, hit
FROM mlb_2018
) t
GROUP BY PLAYER;
并集查询背后的想法是,它将2017年和2018年每个玩家的命中数据带到一个中间表中,然后我们可以对其进行汇总以找到平均值。
答案 1 :(得分:0)
在结构上解决此问题的最佳方法可能是更改ETL流程,以便将它们加载到单个表中,并在加载时添加'year'属性(从文件/源设置)。 / p>
这使您可以灵活地编写特定于年份的语句(其中year = x)或使用group by进行简单的计数/求和聚合函数:)