【发布时间】:2011-12-09 16:40:15
【问题描述】:
这不是 SQL Server Query LEFT JOIN, SUM and GROUP BY and I'm stumped! 的副本。请不要仅仅因为标题相似而标记重复。
假设我有一个表 STARTING_QUARTERBACK,其中包含 PLAYER_ID (int)、TEAM (int) 列。我还有另一个表 QUARTERBACK 列 PLAYER_ID (int), LAST_NAME (varchar 20), FIRST_NAME (varchar 20),以及一个名为 STATISTICS 的表格,其中包含 PLAYER_ID (int)、GAME_DATE (DateTime)、TOUCHDOWN ( int), PASSING_YARD (int).
STARTING_QUARTERBACK
PLAYER_ID int
TEAM int
QUARTERBACK
PLAYER_ID int
LAST_NAME varchar 20
FIRST_NAME varchar 20
STATISTICS
PLAYER_ID int
GAME_DATE DateTime
TOUCHDOWN int
PASSING_YARDS int
我想写一个查询来选择所有不是首发但在 2009 年的所有比赛中投出超过 10 次达阵或超过 1000 码的四分卫。
结果应列出每个符合条件的四分卫 1 行以及他在 2009 年的总 TD 和传球码数。
我得到每个四分卫的多行数据,每行显示 2009 年每场比赛的个人数据,这不是我真正想要的。我想要聚合。什么是正确的 SQL?
编辑 包含我的代码是为了澄清不要混淆,但它似乎有相反的效果,所以我只是删除了代码。问题可以总结如下:假设 NFL 将上述 3 张表格交给你,并要求你列出所有在 2009 年表现出色的非首发 QB,并展示他们当年的综合 TD 和传球码数。 NFL不关心个别比赛,只关心总数。 “做得好”的定义是超过 10 个 TD 或 1000 码。
【问题讨论】:
-
我想你想
GROUP by QUARTERBACK.PLAYER_ID order by QUARTERBACK.PLAYER_ID而不仅仅是订购。 -
@Dan:按 QUARTERBACK.PLAYER_ID 分组。您可以忽略该顺序,这与我要询问的内容无关。
-
这段代码太冗长了,我没有阅读的兴趣。请使用短别名而不是完整的表名。
-
啊抱歉,没看到。您确定该 group by 作品自 starting_quarterback.team 不应该存在吗?你不能只按玩家ID分组吗?另外,您的
sum(STATISTICS.PASSING_YARD < 1000)的括号不好,我不确定您为什么在拥有而不是加入时过滤游戏日期。 -
@Khnle - 请不要删除 SQL。令人困惑的是您的 SQL 语句的文本样式墙,而不是您拥有它的事实。如果没有 SQL,您将错过人们需要查看以帮助您的重要细节,与没有它相比,您将获得更好和更多的答案。没有它,您的问题可能会因无法回答而被关闭。我已将其回滚,您需要重新输入您编辑过的任何其他文本。
标签: sql