首页 > 解决方案 > 计算行和列中值的频率 SQL

问题描述

我有一个 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。

标签: sqlsqlitegroup-bycountpivot

解决方案


您可以将其相加,因为它采用值 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)

推荐阅读