我正在制作游戏的排名页面,我希望首先按胜利排序,然后按损失排序(如果人们拥有相同数量的胜利)。以下查询正常工作,以便按顺序按顺序列出一个列表,但我不确定如何将损失放入此查询中。
SELECT username, COUNT(id) AS wins
FROM tblBattleHistory
WHERE battle_type = '0' && outcome = '1'
GROUP BY username
ORDER BY wins DESC
结果='1'表示他们赢了,所以当结果='0'时,那意味着他们输了。
答案 0 :(得分:8)
你可以这样做:
SELECT username, SUM(outcome) AS wins, COUNT(*) - SUM(outcome) AS losses
FROM tblBattleHistory
WHERE battle_type = '0'
GROUP BY username
ORDER BY wins DESC, losses
答案 1 :(得分:4)
这是我的想法:
SELECT username, SUM (CASE WHEN outcome = '1' Then 1 Else 0 End) As Wins,
SUM (CASE WHEN outcome = '0' Then 1 Else 0 End) As Losses
FROM tblBattleHistory
WHERE battle_type = '0'
GROUP BY username
ORDER BY wins DESC, Losses ASC
(根据您的DBMS,您可能必须重复Order By
中的SUM而不是使用别名。)
这也允许提出一些陌生人的积分计划,例如德国足球(win = 3,tie = 1分)
SELECT username, SUM (CASE
WHEN outcome = '1' Then 3
WHEN outcome = '2' Then 1 /* 2 is a tie */
ELSE 0 End) As Points
etc.
答案 2 :(得分:1)
这可能也有效:
SELECT
username,
SUM(IF(outcome = 1, 1, 0)) AS 'wins',
SUM(IF(outcome = 0, 1, 0)) AS 'losses'
FROM
tblBattleHistory;
它基本上计算outcome = 1
和outcome = 0
的出现次数。
答案 3 :(得分:0)
我认为我的答案显然不是你问的问题,但是......我认为你不应该从tblBattleHistory获取计数,你应该向你添加2个文件用户表(胜利,失败)并更新它们(可能通过插入触发器tblBattleHistory)所以你可以通过简单的选择掌握所有数据。
答案 4 :(得分:0)
SELECT username, losses, wins
FROM (
SELECT username, COUNT(id) AS wins
FROM tblBattleHistory
WHERE battle_type = '0' && outcome = '1'
GROUP BY username
) A
LEFT JOIN (
SELECT username, COUNT(id) as losses
FROM tblBattleHistory
WHERE battle_type = '0' && outcome = '0'
) B ON A.username = B.username
ORDER BY wins DESC, losses ASC
这可能不是一个有效的查询,但可以胜任。