SQL:两个不同表中的值之和
我不想这样做(请求帮助),但我被难住了 我正在编写一个曲棍球池程序,其中一个功能是计算所有球员(守门员和滑冰运动员)“为特定的池队比赛”每周的总积分 我有三张桌子SQL:两个不同表中的值之和,sql,Sql,我不想这样做(请求帮助),但我被难住了 我正在编写一个曲棍球池程序,其中一个功能是计算所有球员(守门员和滑冰运动员)“为特定的池队比赛”每周的总积分 我有三张桌子 **PoolTeams** PoolTeamID PoolTeamName ---------- ------------ 1 Team A 2 Team B 3 Team C **MondaySkaterStat
**PoolTeams**
PoolTeamID PoolTeamName
---------- ------------
1 Team A
2 Team B
3 Team C
**MondaySkaterStats**
Player Weeknumber PoolTeam PTS Status
------ ---------- -------- --- ------
10 1 1 15 True
11 2 1 3 False
13 3 2 5 True
40 1 1 3 True
41 2 1 5 False
43 3 2 1 True
**MondayGoalieStats**
Player Weeknumber PoolTeam PTS Status
------ ---------- -------- --- ------
20 1 3 4 False
21 2 1 3 True
22 3 2 5 False
50 1 3 4 False
51 2 1 3 True
52 1 1 7 True
实际的数据库要大得多,为了清晰起见,我截短了它
此外,MondayGoalieStats表还有一些与结果无关的额外列
比如说,我想总结一下每支状态为TRUE的泳池球队(溜冰者和守门员)的所有球员的得分,我只对第1周感兴趣
下面是我提出的一个SQL查询。它在总结MondaySkaterStats积分时效果很好,但无论出于何种原因,它似乎无法正确总结MondayGalieStats表中的积分。
我决定选择内联,因为球员和守门员的位置并不完全相同。我用Weeknumber作为两者的共同点
SELECT PT.PoolTeamName, SUM(MS.PTS) AS PlayerSum, SUM(MG.PTS) as GoalieSum
FROM PoolTeams PT, MondaySkaterStats MS
INNER JOIN MondayGoalieStats MG ON (MS.Weeknumber=MG.Weeknumber)
WHERE MS.Weeknumber=1
AND PT.PoolTeamID = MS.PoolTeam
AND MS.PoolTeam = MG.PoolTeam
AND MS.Status = True
AND MG.Status = True
GROUP BY PT.PoolTeamName
任何帮助都将不胜感激。。。。谢谢 您可以使用
UNION
创建一个中间表,并在每个表中添加一个标签以保持位置分离。
然后,您可以根据团队和职位分组。这将导致每个团队2行,每个位置1行。
最后,JOIN
加入PoolTeam
表,以获取要显示的PoolTeamName
(不同的引擎会有不同的语法;我习惯MySQL)
从长远来看,将这两个表规范化为1将有助于您的数据库设计,可能还有一个用于特殊守门员字段的辅助表
MondayPlayerStats ExtraGoalieStats
----------------- ----------------
Id -> MondayPlayerId
Pts Blocks
Status ... whatever
WeekNumber
Position (goalie, etc)
... etc
您正在使用的标记数据库您这里有一个奇怪的语法组合…在where子句中使用内部连接语法(最好)或旧的连接,而不是两者都使用。您甚至让mg参与使用这两种方法(where子句中的poolteam,on子句中的week number),数据库结构似乎有点复杂。。。难道不可能有一个全球表“MondayStats”和一个额外的列来存储“skaters”或“goalie”吗?请求会容易得多。这个查询很难阅读,而且很混乱。我甚至不确定这是不是正确的语法。狗仔队,是的。。。同意。我刚刚开始使用SQL,连接让我很困惑……很明显,PoolTeamName不可用。您需要加入。已编辑我的答案,以便在
PoolTeams
表中包含join
。谢谢。以前也有人提出过类似的建议,我可能不得不同意。我本以为加入谈判桌会很容易,但却会带来很多问题。谢谢你的帮助。
MondayPlayerStats ExtraGoalieStats
----------------- ----------------
Id -> MondayPlayerId
Pts Blocks
Status ... whatever
WeekNumber
Position (goalie, etc)
... etc