回答

收藏

SQL查询中Select的语法

技术问答 技术问答 240 人阅读 | 0 人回复 | 2023-09-12

我有一个带下表的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获得累积结果。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则