查询具有相似信息的两个表

时间:2019-09-16 00:01:40

标签: sql sql-server

我正在研究一些棒球统计数据,以提高数据库能力,我掌握了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

所以我想要的是将两个季节合计为两年,然后取平均值。

2 个答案:

答案 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进行简单的计数/求和聚合函数:)