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)";
我们有两张桌子要加入:所有的比赛和球员。PlayerUser有一个用户名,该用户名与给定赛季allMatches表上的player1或player2(可能与赢家)匹配。
我想计算玩过的游戏数(他们参加的任何比赛)和赢过的游戏数(他们在playerUsers上的用户名与所有比赛中的赢家匹配)。上面的SQL语句将wins和games作为相同的数字返回。有没有办法在同一个SQL语句中计算获胜和游戏的数量?
最佳答案
使用SUM
而不是COUNT
来计算获胜数:
SELECT SUM(m.winner = p.userName) AS wins, ...
它之所以起作用,是因为布尔表达式的计算结果是0和1,因此
SUM
给出了表达式为真的行的总数。关于php - 计算行数和值匹配数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11812251/