一尘不染

SQL查询中Select的语法

sql

我有一个带下表的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;

但是我不知道如何概括该查询以返回与另一支球队的球员的比赛。


阅读 214

收藏
2021-05-30

共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以获得累积结果。

2021-05-30