SQL行和列中值的计数频率
我有一个SQLite数据库,我试图计算列中出现的值以及相应行中出现的值 我的数据集是:SQL行和列中值的计数频率,sql,sqlite,group-by,count,pivot,Sql,Sqlite,Group By,Count,Pivot,我有一个SQLite数据库,我试图计算列中出现的值以及相应行中出现的值 我的数据集是: participant_id game_id win selected_champion 2 3640481414 0 Yasuo 7 3643429174 0 Gangplank 10 3643470467 1 Jhin 5 3643669
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
但我似乎不知道如何计算win=1与冠军相比的次数。你可以求和,因为它取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)
您可以执行条件聚合:
select
selected_champion,
count(*) games_played,
sum(win) games_won
from mytable
group by selected_champion
这是因为win
仅包含0
s和1
s。如果它是一个类似于'won'
,'lost'
的字符串,您将执行以下操作:
select
selected_champion,
count(*) games_played,
sum(win = 'won') games_won
from mytable
group by selected_champion
旁注:不要对标识符使用单引号。尽管某些数据库可能接受单引号,但单引号应仅保留给文字字符串。为数据库使用正确的引号字符(在SQLite中,最好使用双引号),或者最好使用不需要引号的标识符