这是表GAMES的摘录:
ID WUSER BUSER
1 ddyer bdot
2 ddyer ronaldinho
3 bluedog ronaldinho
4 ronaldinho bluedog
5 bluedog ronaldinho
6 ddyer bobc
7 bobc ddyer
该表是来自boardspace.net网站的数据库,人们在其中进行棋盘游戏。在数据库中,wuser和buser是针对白人和黑人玩家的,id是所玩的游戏。现在,我想知道发挥最多的球员。所以我为白人球员做这件事:
SELECT wuser, count(wuser)
FROM game
GROUP BY wuser
ORDER BY count(wuser) DESC;
结果是:
wuser count(wuser)
Dumbot 75926
guest 22541
image13 1594
DrRaven 1460
Eucalyx 1147
Loizz 963
然后我必须对黑人球员做同样的事情:
SELECT buser, count(buser)
FROM game
GROUP BY buser
ORDER BY count(buser) DESC;
buser count(buser)
Dumbot 59489
guest 29324
Eucalyx 1007
image13 756
DrRaven 746
Loizz 715
alexis 660
我可以像下面一样手动对其进行汇总,但是如何从单个SQL语句中获取结果:
user count(as both buser and wuser)
Dumbot 135412
guest 51865
image13 2350
DrRaven 2206
我只想知道每个玩家玩的游戏总数,所以我不关心他们玩白色还是黑色。
最佳答案
由于每个用户有大量行,因此最好在UNION之前增加COUNT并添加另一个聚合步骤:
SELECT usr, sum(cnt)
FROM
(
SELECT wuser as usr, count(*) as cnt
FROM game
GROUP BY wuser
UNION ALL
SELECT buser, count(*)
FROM game
GROUP BY buser
) AS dt
GROUP BY usr
ORDER BY sum(cnt) DESC;
关于sql - SQLite:从两个相关的列中获取模态/模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30252628/