3

問題
私はデータを収集している4つのゲームサーバーを持っています。データを単一のテーブルに配置します。残念ながら、これにより1人のプレイヤーの統計ごとに4つのエントリが発生します。


必要なもの特定の列に1つのレコードとSUM()が必要です

私が書いた、うまくいかない声明を投稿しますが、あなたは私が達成したいことの要点を理解するでしょう。

SELECT DISTINCT( Name ), 
               Max(Level), 
               Class, 
               Sum(Kills), 
               Sum(Deaths), 
               Sum(Points), 
               Sum(TotalTime), 
               Sum(TotalVisits), 
               CharacterID 
FROM   Characters 
WHERE  Name LIKE '$value%' 
        OR CharacterID LIKE '$value' 
ORDER  BY Name ASC; 
4

2 に答える 2

5

個別を使用する代わりに、集約されていないフィールド(つまり、名前、クラス、文字ID)でグループ化することができます。このようにして、集計を使用できます:max、sum、そしてあなたはまだあなたの独特のキャラクターを持っています!

于 2012-05-01T02:04:51.223 に答える
5

まず、データベース内の重複する行は理想的とは言えません。完全に正規化されたデータベースにより、ランダムな異常が発生することなく、データの操作がはるかに簡単になります。

しかし、あなたの質問に答えるために、これは単にdweissが(group byを使用して)コードに入れたと言ったことです:

SELECT
  name,
  MAX(Level),
  Class,
  SUM(Kills),
  SUM(Deaths),
  SUM(Points),
  SUM(TotalTime),
  SUM(TotalVisits),
  CharacterID
FROM
  Characters
WHERE
  Name LIKE '$value%' OR CharacterID LIKE '$value'
GROUP BY
  name,
  class,
  characterid
ORDER BY
  Name ASC
;

名前、クラス、characterIDは、各プレーヤーですべて同じであると想定しています。これが、これらの値を取得する唯一の方法だからです。それ以外の場合は、それらにも集計関数を使用する必要があります。

于 2012-05-01T02:08:07.837 に答える