这不是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),以及名为ç计的表格,列 PLAYER_ID (int), GAME_DATE (日期时间), 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码。
答案 0 :(得分:1)
如果不查看数据,很难说。 我认为这个问题可能是小组的问题。试试这两个变化:
从组中删除STARTING_QUARTERBACK.TEAM。你不是在寻找STARTING_QUARTERBACK中的人。也从SELECT中删除它。它将始终为NULL
从已经在WHERE中过滤的情况中删除条件“STATISTICS.GAME_DATE> ='2009-01-01'和STATISTICS.GAME_DATE<'2010-01-01'”。
答案 1 :(得分:1)
select
player_id, sum(touchdown) total_touchdowns, sum(passing_yard) total_yardage
from quaterback q, statistics s
where q.player_id = s.player_id
and q.player_id not in (select player_id from starting_quarterback)
group by player_id
having sum(touchdown) > 10, sum(passing_yard) > 1000
或强>
select * from
(
select
player_id, sum(touchdown) total_touchdowns, sum(passing_yard) total_yardage
from quaterback q, statistics s
where q.player_id = s.player_id
and q.player_id not in (select player_id from starting_quarterback)
group by player_id
)
where total_touchdows > 10 and total_yardage > 1000