2013-07-25 31 views
2

我有以下表和SQLite數據庫:語法選擇在SQL查詢

CREATE TABLE games (name text, date text, winloss int, gameid int, pointsfor int, pointsagainst int); 

兩個樣本記錄會是什麼樣子:

Anna A, 7/12/13, 0, 345, 56, 28 
Barley B, 7/12/13, 1, 345, 28, 56 

(大麥的球隊輸了,和安娜的韓元遊戲每隊幾名球員)。我想創建一個查詢,將返回所有對一個團隊,並在另一個ÿ球員,加上那些遊戲累積的結果X場球員。

我知道如何做到這一點使用Perl和csv文件,我相信我可以用同樣的方法與DBI接口。但是,我想了解如何僅使用SQL查詢創建此報告。我是一個新人,SQL,和我懷疑的解決方案可能涉及使用CASE WHEN或加入以創建一個新表旋轉表;但我看不出如何去做。

這個查詢將返回當球員們在同一支球隊,並贏得(或丟失,這取決於winloss的值)的所有遊戲:

select gameid,date from games 
where name in ('Anna A', 'Barley B') and winloss=1 
group by gameid 
having count(*)>1; 

但我不知道該如何籠統地說查詢與另一隊的球員交換比賽。

+0

*所有有X在一個隊的球員和y的球員在另一個*您計劃如何在定義'x'和'y' –

+0

通過用戶查詢的遊戲。我想知道玩家x贏得了多少場比賽。因此,例如,所有'安娜A'和'大麥B'對'查理C'和'丹妮爾D'。 – user2619203

+0

缺少一些東西,玩家的數量從哪裏來? –

回答

0

這會給你的遊戲或遊戲,其中A和B贏得與C,d和E.所有線路

select * 
from games 
where gameid in  
    (select gameid from games 
     where name in ('Anna A', 'Barley B') and winloss=1 
     group by gameid 
     having count(*) = 2 
    intersect 
    select gameid from games 
     where name in ('Charly C', 'Dave D', 'Ed E') and winloss = 0 
     group by gameid 
     having count(*) = 3) ; 

或者,你可以使用:

select * 
from games where gameid in (
    select gameid from games where name = 'Anna A' and winloss = 1 intersect 
    select gameid from games where name = 'Barley B' and winloss = 1 intersect 
    select gameid from games where name = 'Charly C' and winloss = 0 intersect 
    select gameid from games where name = 'Dave D' and winloss = 0  intersect 
    select gameid from games where name = 'Ed E' and winloss = 0 
    ) ; 

哪個適合你。

可以再加入sumgroup by得到累積的結果。

+0

我還沒有了解相交。這非常有幫助。 – user2619203

0

像這樣的東西可能會有所幫助:

where name in ('Anna A', 'Barley B') 

變化

where name in (SELECT DISTINCT Player FROM games) 
+0

你可以在同一個查詢中有兩個wheres嗎?或者你的意思是把第一個換成第二個?據我所知,這只是返回所有遊戲的列表。 – user2619203

+0

不,我的帖子沒有巧妙地編寫。我添加的SELECT被稱爲嵌套查詢。我用桌面遊戲中的一個獨特的玩家列表替換你的兩位硬編碼玩家。我懷疑這是你整體問題的最終解決方案。 – rheitzman

+0

好的。我想到的全部是「安娜A」和「大麥B」,而「查理C」和「丹妮爾D.」不要生成關於所有(大量)組合的報告,而只是在用戶選擇的組合上生成報告。 – user2619203