sqlite—sql行和列中值的计数频率

dzjeubhm  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(384)

我有一个sqlite数据库,我试图计算列中出现的值以及相应行中出现的值。
我的数据集是:

participant_id  game_id      win   selected_champion

    2           3640481414    0     Yasuo
    7           3643429174    0     Gangplank
    10          3643470467    1     Jhin
    5           3643669725    0     Rammus
    10          3643707347    1     Talon
    10          3644255324    1     Sivir
    5           3644305477    1     Sion
    8           3644626709    1     Shaco
    5           3645020045    1     Warwick
    10          3645063546    0     Jhin

预期的输出是

selected_champion   games_played  games_won

Gangplank                1            1
Jhin                     2            1
Rammus                   1            0

我可以用查询得到玩游戏的次数

SELECT 
    selected_champion,
    count(selected_champion) as 'games_played' 
FROM (myTable) GROUP BY selected_champion

但我似乎不知道如何计算赢=1的次数与冠军相比。

qcbq4gxm

qcbq4gxm1#

您可以执行条件聚合:

select 
    selected_champion,
    count(*) games_played,
    sum(win) games_won
from mytable
group by selected_champion

这是因为 win 包含 0 s和 1 只有她。如果是像 'won' , 'lost' ,您将执行以下操作:

select 
    selected_champion,
    count(*) games_played,
    sum(win = 'won') games_won
from mytable
group by selected_champion

旁注:不要对标识符使用单引号。虽然有些数据库可能接受它,但单引号应该只保留给文本字符串。为数据库使用正确的引号字符(在sqlite中,最好使用双引号),或者最好使用不需要引号的标识符。

yvfmudvl

yvfmudvl2#

可以求和,因为它取0和1的值:

SELECT selected_champion, COUNT(*) as games_played, SUM(win) as games_won
FROM myTable
GROUP BY selected_champion;

更一般的解决方案是将其转换为布尔值:

SUM( win = 1 )

或在任何数据库中工作的版本:

SUM(CASE WHEN win = 1 THEN 1 ELSE 0 END)

相关问题