2017-02-14 6 views
-1

私は比較的簡単な質問がありますが、私は必要な結果を表示するために適切なSQLクエリを書くことができません。試合に参加した選手のIDを示す列、勝者、結果にその試合を含めるかどうかを示す別のブール値の列を含むテーブルがあります。だから、列は次のとおりです。IF文を使用してMySQLの行を数えるには?

player1_id | player2_id | winner_id | use 

のでwinner_idは勝ったプレイヤーに応じて、最初の2つの列の1からの値です。私は特定のプレイヤーがちょうどuseフラグがアップしている行を使用してゲームに勝った回数をカウントしたい場合は、私は簡単にそれを行うことができます。

SELECT COUNT(*) AS total, winner_id 
FROM table 
WHERE use = 1 
GROUP BY winner_id 
ORDER BY total DESC 

しかし、私はまた、同じカウントをしたいが、試合を失った選手たちのために。言い換えれば、私はwinner_idではなく、winner_idと異なるものに応じて、player1_idまたはplayer2_idの値になる敗者IDでグループ化したいと思います。どのように簡単なクエリでそれを行うための手掛かり?あなたはloosersをカウントするために、次のように行うことができます

+1

編集ご質問や、サンプルデータと望ましい結果を提供します。 –

+0

ひどいテーブルデザイン - 第1列の勝者、第2列の対戦相手。 – user3741598

+0

表のデザインは良いとは言わないが、誰が勝つのかを事前に知らなくても、2人の選手の間にはいくつかの試合が設定されている。 – mmvsbg

答えて

2

SELECT 
    COUNT(*) AS total, 
    IF(player1_id = winner_id, player2_id, player1_id) AS looser_id 
FROM table 
WHERE use = 1 
GROUP BY looser_id 
ORDER BY total DESC 
+0

良い答えですが、なぜ 'COUNT(*)'を使わないことをお勧めしますか?これはレコードを数える自然な方法です。 NULLの検出が必要な場合(たとえば、外部結合の場合)にのみ、列を数えます。 –

+0

あなたは正しいです。Thorsten ...訂正してくれてありがとう。この場合、特定の列をカウントすることは関係ありません。私は私の答えを訂正します。 –

+0

素晴らしい作品です。 – mmvsbg

関連する問題