2011-12-08 51 views
1

這不是SQL Server Query LEFT JOIN, SUM and GROUP BY and I'm stumped!的重複。請不要因爲標題中的相似性而標記重複。左加入Sql,集合總和和

假設我有一個表STARTING_QUARTERBACK與列PLAYER_ID(INT),TEAM(INT)。我也有另一個表四分衛與列PLAYER_ID(INT),LAST_NAME(VARCHAR 20),FIRST_NAME(VARCHAR 20),和一張桌子稱爲統計與列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符合條件和他的聚合TD和通過碼在2009年的行。

我得到每個四分衛多行,其中每行顯示每個遊戲在2009年的個人統計這不是我真的想。我想要聚合。什麼是正確的SQL?

編輯包括我的代碼是爲了澄清不混淆,但它似乎有相反的效果,所以我只是刪除了代碼。這個問題可以總結如下:假裝NFL給你上面的3張牌,並要求你列出所有在2009年表現不錯的非QB,並且顯示他們在那一年的聯合TD和傳球碼。 NFL不關心個人比賽,只是總數。 「做得好」的定義是超過10個TD或1000碼。

+0

我想你想'GROUP由QUARTERBACK.PLAYER_ID爲了通過QUARTERBACK.PLAYER_ID'而不僅僅是借命令。 – Dan

+0

@Dan:GROUP由QUARTERBACK.PLAYER_ID在那裏。你可以忽略這個順序,這與我想問的無關。 –

+1

這段代碼太冗長了,我不想閱讀它。請使用簡短的別名而不是全名錶。 –

回答

1

不看數據就很難說。 我認爲這個問題可能是由小組來完成的。嘗試這兩個更改:

  • 從組中刪除STARTING_QUARTERBACK.TEAM by。您不在STARTING_QUARTERBACK中尋找人員。從SELECT中刪除它。這將是永遠NULL

  • 刪除的條件,從你在WHERE已經過濾有「STATISTICS.GAME_DATE> =‘2009-01-01’和STATISTICS.GAME_DATE <‘2010-01-01’」。

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 
+0

謝謝。沒有發佈太多內容,也不知道如何封鎖格式......並且不想把它弄亂太久;) – Dano