R 用SQLite连接数据库

R 用SQLite连接数据库,r,database,sqlite,R,Database,Sqlite,我有4个关于美洲杯的数据库 SELECT * FROM teams > Code | Country | TeamName ITA |Italy | Luna Rossa Prada Pirelli Team NZ |New Zealand | Emirates Team New Zealand UK |United Kingdom |

我有4个关于美洲杯的数据库

SELECT * FROM teams
>
Code | Country                  | TeamName
ITA  |Italy                     | Luna Rossa Prada Pirelli Team     
NZ   |New Zealand               | Emirates Team New Zealand     
UK   |United Kingdom            | INEOS Team UK     
USA  |United States of America  | NYYC American Magic
4 rows

SELECT * FROM races
>
Race    Tournament  Date    Racedate 
RR1R1   RR          15-Jan  18642   
RR1R2   RR          15-Jan  18642   
RR1R3   RR          16-Jan  18643   
RR2R1   RR          16-Jan  18643   
RR2R2   RR          17-Jan  18644   
RR2R3   RR          17-Jan  18644   
RR3R1   RR          23-Jan  18650   
RR3R2   RR          23-Jan  18650   
RR3R3   RR          23-Jan  18650   
SFR1    SF          29-Jan  18656
1-10 of 31 rows

SELECT * FROM tournaments
>
Tournament  Event           TournamentName
RR          Prada Cup       Round Robin     
SF          Prada Cup       Semi-Final      
F           Prada Cup       Final       
AC          America's Cup   Americas Cup
4 rows

SELECT *
FROM results
>
Race   Code    Result
FR1    ITA     Win      
FR1    UK      Loss     
FR2    UK      Loss     
FR2    ITA     Win      
FR3    UK      Loss     
FR3    ITA     Win      
FR4    ITA     Win      
FR4    UK      Loss     
FR5    ITA     Win      
FR5  UK Loss        
1-10 of 62 rows
我正在尝试编写一个SQL查询,它将输出每个队在锦标赛中赢得的比赛数,并显示输出。输出表应包括事件的全名、锦标赛和每个队的全名。我目前的问题如下:

SELECT TeamName, Result, Event, tournaments.Tournament
FROM teams LEFT JOIN results
ON teams.Code = results.Code
LEFT JOIN races
ON results.Race = races.Race
LEFT JOIN tournaments
ON races.Tournament = tournaments.Tournament
WHERE Result = 'Win'
ORDER BY tournaments.Tournament
哪些产出:

TeamName                        Result  Event           Tournament
Emirates Team New Zealand       Win     America's Cup   AC  
Emirates Team New Zealand       Win     America's Cup   AC  
Luna Rossa Prada Pirelli Team   Win     America's Cup   AC  
Luna Rossa Prada Pirelli Team   Win     America's Cup   AC  
Emirates Team New Zealand       Win     America's Cup   AC  
Luna Rossa Prada Pirelli Team   Win     America's Cup   AC  
Emirates Team New Zealand       Win     America's Cup   AC  
Emirates Team New Zealand       Win     America's Cup   AC  
Emirates Team New Zealand       Win     America's Cup   AC  
Emirates Team New Zealand       Win     America's Cup   AC
当我尝试将(结果)计数为NumberOfWins时,我得到:

TeamName                        Result    NumberOfWins    Event     Tournament
Luna Rossa Prada Pirelli Team   Win       31              Prada Cup F
1 row
为什么加上计数只算卢娜·罗萨的胜利?如何更改查询以修复它

为什么加上计数只算卢娜·罗萨的胜利

Count()是一个聚合函数,每个组生成一个结果

由于没有
GROUPBY
子句,因此整个结果集是一个组,因此是一个结果

  • 你获得锦标赛F的原因是

    • 如果SELECT语句是没有GROUP BY子句的聚合查询,则在整个数据集中对结果集中的每个聚合表达式求值一次结果集中的每个非聚合表达式对数据集的任意选定行计算一次。每个非聚合表达式都使用相同的任意选定行。或者,如果数据集包含零行,则每个非聚合表达式将根据完全由空值组成的行进行求值。依照-
如何更改查询以修复它

因此,您需要一个
GROUPBY
子句。创建count()函数将处理的组

您可能需要按锦标赛分组,球队名称

e、 g


为什么要使用标签?我在R中使用SQLite。不合适吗?问题是基于SQL的,您所有的示例数据和代码都是SQL,您会问如何使用SQLite获得它。无论您是通过R、python还是ruby访问sqlite数据库,仍然是关于sqlite的问题。留着吧,我不在乎,也许有人懂SQL,但不懂。
SELECT TeamName, Result, Event, tournaments.Tournament, count(*)
FROM teams LEFT JOIN results
ON teams.Code = results.Code
LEFT JOIN races
ON results.Race = races.Race
LEFT JOIN tournaments
ON races.Tournament = tournaments.Tournament
WHERE Result = 'Win'
GROUP BY Tournament,Teamname
ORDER BY tournaments.Tournament