2012-08-04 72 views
1
SELECT COUNT(m.winner = p.userName) AS wins, YEAR(m.datePlayed) AS year, DATE_FORMAT(m.datePlayed, '%M') AS month, COUNT(*) as games FROM allMatches AS m LEFT JOIN playerUsers AS p ON m.season = p.season AND (m.player1 = p.userName OR m.player2 = p.userName) WHERE p.realName = '$realName' AND m.winner != '' AND m.canceled != '1' GROUP BY YEAR(m.datePlayed), MONTH(m.datePlayed)"; 

我们有2个表我们加入:allMatches和playerUsers。 PlayerUser有一个用户名,该用户名与给定季节的allMatches表中的player1或player2(可能是赢家)相匹配。计数行数和数值匹配

我想统计玩过的游戏数量(他们所在的任何比赛)以及他们赢得的比赛数量(其中他们的用户名在playerUsers上与所有匹配的获胜者相匹配)。上面的SQL语句返回胜利和游戏作为相同的数字。有没有办法在同一个SQL语句中计算胜利和游戏的数量?

回答

2

使用SUM代替COUNT计算胜场数:

SELECT SUM(m.winner = p.userName) AS wins, ... 

它的工作原理,因为布尔表达式计算结果为0和1,所以SUM给你行,其中表达的总数真正。