具有左联接、聚合和和分组方式的Sql

具有左联接、聚合和和分组方式的Sql,sql,Sql,这不是一个复制品。请不要仅仅因为标题的相似性而标记重复 假设我有一张表,其中列有球员ID(int)和球队ID(int)。我还有另一个表四分卫,列有球员ID(int)、姓氏(varchar 20)、名字(varchar 20),还有一个名为统计数据的表,列有球员ID(int),比赛日期(DateTime),着陆(int),过码(int) 我想写一个查询,以选择所有四分卫谁不是一个先发球员,但抛出超过10个触地得分或超过1000码的所有比赛在2009年的总和 结果应该是每四分卫一排符合条件的球员,以

这不是一个复制品。请不要仅仅因为标题的相似性而标记重复

假设我有一张表,其中列有球员ID(int)和球队ID(int)。我还有另一个表四分卫,列有球员ID(int)、姓氏(varchar 20)、名字(varchar 20),还有一个名为统计数据的表,列有球员ID(int),比赛日期(DateTime),着陆(int),过码(int)

我想写一个查询,以选择所有四分卫谁不是一个先发球员,但抛出超过10个触地得分或超过1000码的所有比赛在2009年的总和

结果应该是每四分卫一排符合条件的球员,以及他在2009年的总TDs和传球码数

我得到了每个四分卫多行,每行显示的是2009年每场比赛的个人数据,这不是我真正想要的。我要总数。正确的SQL是什么


编辑包含我的代码是为了澄清而不是混淆,但它似乎有相反的效果,所以我只是删除了代码。问题可以总结如下:假设NFL将上述三张表格交给你,让你列出所有在2009年表现出色的非首发QB,并展示他们在那一年的TDs和传球码。NFL不关心个人比赛,只关心总数。“做得好”的定义是超过10 TDs或1000码

不看数据很难说。 我认为问题可能出在小组上。尝试以下两个更改:

  • 将首发四分卫从小组中除名。你不是在寻找首发的四分卫。将其从“选择”菜单中删除。它将始终为空

  • 将条件“STATISTICS.GAME_-DATE>='2009-01-01'和STATISTICS.GAME_-DATE<'2010-01-01'”从已在何处进行筛选的列表中删除

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

我想你应该
按四分卫分组。球员ID按四分卫排序。球员ID
而不是按顺序排序。@Dan:按四分卫分组。球员ID在那里。你可以忽略这个顺序,不管我想问什么,这个代码太冗长了,我不想读。请使用短别名而不是完整的表名。啊,对不起,没有看到。你确定从四分卫开始,分组就起作用了吗?你不能按玩家id分组吗?另外,您的
总和(STATISTICS.PASSING_YARD<1000)
有不好的参数,我不确定您为什么在游戏日期筛选您的have而不是join。@Khnle-请不要删除SQL。令人困惑的是您的SQL语句的文本墙样式,而不是您的SQL语句。如果没有SQL,您将丢失人们为帮助您而需要查看的重要细节,使用它您将获得比不使用它更好、更多的答案。如果没有它,你的问题就有被关闭的风险,因为你无法回答。我已将其回滚,您需要重新输入您在中编辑的任何其他文本。谢谢。没有张贴太多,不知道如何阻止格式。。。也不想把它弄得太久;)
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