これはどうですか?
SELECT a.fighter, COUNT(*) AS wins
FROM (SELECT challenger_id AS fighter
FROM fights
WHERE challenger_won = TRUE
UNION ALL
SELECT challengee_id AS fighter
FROM fights
WHERE challenger_won = FALSE
) AS a
GROUP BY a.fighter;
challenger_won
がNULLの場合は、必要に応じて、UNIONの両方のクエリは、行を無視します。
あなたはUNION ALL好きではない場合は、代わりに、使用することができます。
SELECT a.fighter, SUM(a.wins) AS wins
FROM (SELECT challenger_id AS fighter, 'R' AS role, COUNT(*) AS wins
FROM fights
WHERE challenger_won = TRUE
GROUP BY fighter, role
UNION
SELECT challengee_id AS fighter, 'E' AS role, COUNT(*) AS wins
FROM fights
WHERE challenger_won = FALSE
GROUP BY fighter, role
) AS a
GROUP BY a.fighter;
をUNIONの最初の部分は(「チャレンジャーウォン」の)役割と戦闘機のように「R」との行を生成し、 IDと戦いの数を獲得した。 2番目の部分はロール( 'challengeE won'の場合)と戦闘機IDと戦いの数を獲得した 'E'の行を生成します。チャレンジャーとして3戦、チャレンジャーとして3戦を獲得した戦闘機の場合には、この役割が必要です。役割がなければ、同じ戦闘機とカウントを持つ2つのエントリーが1つに崩壊します。その後、各ロールの各戦闘員の勝利金額を合計します。
最初のクエリを実行すると「すべての派生テーブルには別のエイリアスが必要です」というエラーが表示されます – keruilin
@keruilin:有罪判決を受けました - 不足している 'AS a'句を追加しましたAS b 'の代わりに不明なテーブル/エイリアス' a 'エラーが発生します。私はコードを実行していません。 –