从MySQL查询中选择2 COUNT()

时间:2009-11-07 23:25:44

标签: sql mysql count

我正在制作游戏的排名页面,我希望首先按胜利排序,然后按损失排序(如果人们拥有相同数量的胜利)。以下查询正常工作,以便按顺序按顺序列出一个列表,但我不确定如何将损失放入此查询中。

SELECT username, COUNT(id) AS wins 
  FROM tblBattleHistory 
  WHERE battle_type = '0' && outcome = '1' 
  GROUP BY username 
  ORDER BY wins DESC

结果='1'表示他们赢了,所以当结果='0'时,那意味着他们输了。

5 个答案:

答案 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 = 1outcome = 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

这可能不是一个有效的查询,但可以胜任。

相关问题