我有一个带下表的sqlite数据库:
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个玩家在一个团队而y个玩家在另一个团队的游戏,以及这些游戏的累积结果。游戏。
我知道如何使用perl和csv文件来执行此操作,并且我相信我可以对dbi接口使用相同的方法。但是,我想学习如何仅使用SQL查询来创建此报告。我是SQL的新手,我怀疑该解决方案可能涉及使用CASE WHEN或JOIN旋转表以创建新表。但我看不到该怎么做。
此查询将返回所有玩家所在的团队并赢得(或失败,取决于winloss的值)的所有游戏:
select gameid,date from games where name in ('Anna A', 'Barley B') and winloss=1 group by gameid having count(*)>1;
但是我不知道如何概括该查询以返回与另一支球队的球员的比赛。
这将为您提供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 ) ;
最适合您的。
然后sum,您可以添加和group by以获得累积结果。
sum
group by