我有一个带下表的sqlite数据库: 1 B6 k: h5 i' B' c& v0 n. sCREATE TABLE games (name text,date text,winloss int,gameid int,pointsfor int,pointsagainst int);两个示例记录如下: 5 g5 k* O" V# {3 a- ^Anna A,7/12/13,0,345,56,28Barley B,7/12/13,1,345,28(大麦队输了,安娜赢了。每场比赛每队都有几名球员。)我想创建一个查询,它将返回所有人x一个球员在一个团队y在另一个团队中玩家的游戏,以及这些游戏的积累结果。4 n. W& A( X+ s; a5 G7 b
我知道怎么用perl和csv文件执行此操作,我相信我可以dbi界面使用相同的方法。但是,我想学习如何只使用它SQL查询并创建此报告。SQL我怀疑这个解决方案可能涉及新手的使用CASE5 P& S2 ?3 b/ O( z& a+ k7 D: l
WHEN或JOIN旋转表创建新表。但我看不出该怎么办。 % f1 }1 P) C0 I+ }2 |9 d4 |# V这个查询将返回所有玩家的团队并获胜(或失败)winloss所有游戏的价值:1 D. T/ x5 A4 Y Q+ j9 `
select gameid,date from gameswhere name in ('Anna A','Barley B') and winloss=1 group by gameid having count(*)>1;但是我不知道如何总结这个查询来回到另一支球队的球员。3 V5 e* { V7 Z: `" o
: d! r5 j, r3 } ?2 `6 _解决方案: ) @9 R3 R: s( y9 c% D; S! Z 这将为您提供A和B胜过C,D和E所有游戏路线。8 \# B* G- B6 d; D& T) A: ^
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 = group by gameid having count(*) = 3) ;或者,您可以使用: # n% F H) p* s! Kselect *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 = 最适合你的。 . c, C4 g* a( S) }+ }& P: K然后sum,您可以添加和group by获得累积结果。