【发布时间】:2018-03-21 16:22:37
【问题描述】:
不想这样做(寻求帮助)但我很难过......
我正在编写一个曲棍球台球程序,其中一个功能是计算所有球员(守门员和溜冰者)在特定台球队“比赛”的每周总积分。
我有 3 张桌子。
**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 表中的积分。 我决定使用 INNER JOIN,因为 Player 和 Goalie 表并不完全相同。我用 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
任何帮助将不胜感激....谢谢!
【问题讨论】:
-
你正在使用的标签数据库
-
你在这里有一个奇怪的语法组合......使用内部连接语法(首选)或在 where 子句中使用较旧的连接,而不是两者。您甚至使用两种方法加入了 mg(where 子句中的 poolteam,on 子句中的周数)
-
数据库结构似乎有点复杂......难道不可能有一个全局表“MondayStats”,其中有一个额外的列存储“skaters”或“goalie”吗?请求会容易得多。
-
该查询难以阅读且混乱。我什至不确定这是有效的语法。
-
狗仔队,是的……同意。我刚刚进入 SQL 的事情,而 JOIN 让我很困惑……因为这很明显。
标签: sql