2016-12-12 8 views
2

私はこのクエリのヘルプが必要です..私はファーストパーソンシューティングゲームのための統計情報を保持します。MySQLのクエリ....トリッキーなカウント..どのように結合する

データは次のようになります。私は、クエリをはるか午前これをしました http://i.imgur.com/An4EXFL.png

SELECT 
a.name,p.killer as killer_id, ROUND(AVG(p.distance)) as average_distance,p.bambikill, 
(Select count(killer)) as total_kills, 
(Select count(bambikill) where bambikill = 1)as newbiekills 
FROM 
player_stats p 
inner join account a on p.killer = a.uid 
group by killer_id 

私は次に何をする必要がどのようなenter image description here

の結果が取得されます犠牲者の欄に入っているプレイヤー「キラー」の死亡数とそのプレイヤーの死亡数を数えます。毎回彼は犠牲者の列に錫を上げています。

これは可能ですか?私はいくつかの組み合わせを試しましたが、それを正しくするように見えません。私はMySQLのクエリでは最善ではありません。

+0

死亡者数のサンプル計算を表示できますか? –

+0

それは事です、私はkiller_idがvictim_id列にあるたびに計算する方法を理解しようとしています....私はMySQLを介してそれを行うことはできませんか?多分私は知りませんいくつかの魔法..... – Patrick

答えて

2

キラーが殺された回数を特定するオプションの1つは、犠牲者列を集約するサブクエリを使用することです。次に、このサブクエリに対する現在のクエリLEFT JOINLEFT JOINは、キラーが決して実際に殺されない可能性を可能にするために使用されていることに注意してください。この場合、COALESCEはこの統計情報に対してゼロを報告します。

SELECT t2.name, 
     t1.killer_id, 
     t1.average_distance, 
     t1.total_kills, 
     t1.newbiekills, 
     COALESCE(t3.numKills, 0) AS num_times_killed 
FROM 
(
    SELECT p.killer AS killer_id, 
      ROUND(AVG(p.distance)) AS average_distance, 
      COUNT(*) AS total_kills, 
      SUM(p.bambikill) AS newbiekills 
    FROM player_stats p 
    GROUP BY p.killer 
) t1 
INNER JOIN account t2 
    ON t1.killer = t2.uid 
LEFT JOIN 
(
    SELECT victim, COUNT(*) AS numKills 
    FROM player_stats 
    GROUP BY victim 
) t3 
    ON t1.killer = t3.victim 
GROUP BY t1.killer 
+0

これは素晴らしいですが、私はグループバイを追加しなければならなかったので、それはそれぞれの値を示しています...そうでなければそれは1つを示した。 – Patrick

+0

@Patrick申し訳ありませんが、私はそれを修正しました。 –

+0

前回のクエリがうまくいきました。編集したものはありません...最後にkiller_idでグループを追加していました。 – Patrick

関連する問題