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/

10-12 12:41
查看更多