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)";

参加しているテーブルは、allMatchesとplayerUsersの2つです。PlayerUserには、特定のシーズンのallMatchesテーブルのplayer1またはplayer2(および場合によっては勝者)のいずれかに一致するユーザー名があります。

プレイしたゲームの数(参加している試合)と勝ったゲームの数(playerUsersのユーザー名がallMatchesの勝者と一致する場合)を数えたいです。上記のSQLステートメントは、勝利とゲームの両方を同じ数として返します。同じSQLステートメントで勝利とゲームの数を数える方法はありますか?

4

1 に答える 1

2

SUM代わりにを使用COUNTして、勝利数を計算します。

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

ブール式が0と1のいずれかに評価されるため、これSUMは機能します。したがって、式が真であった行の総数がわかります。

于 2012-08-04T21:58:19.947 に答える