2012-05-01 11 views
3

問題
データを収集する4つのゲームサーバーがあります。データを単一のテーブルに入れる。残念ながら、これは1人のプレーヤーのためのstatごとの4つのエントリーを引き起こします。SQLクエリ:DISTINCT/UNIQUEとSUM()を1つのステートメントで使用する

私がお望みのもの
特定の列に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; 
+2

重複する行は、多くの場合、システムアーキテクチャに問題があることを示す記号です。あなたは、どのように並列サーバを扱っているのか考え直すことができます。 –

答えて

5

データベースの重複行が本当に理想的でないと言うことから始めましょう。 fully normalizedデータベースでは、ランダムな異常をポップアップさせることなく、データを操作しやすくなります。しかし、あなたの質問に答えるために、これは(group byを使用して)dweissがコードに入れて言っただけである

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を仮定しているが、各プレイヤーのためにすべて同じです、それがそこの値を取得する唯一の方法だからです。それ以外の場合は、集約関数を使用する必要があります。

+2

ありがとう、私は確かにStackedOverflowのスタイルでばかげている。 OP - Timは、正規化されたdbが、より簡単で、ほぼ常に最適化されたことを証明するという点で、ここで間違いなく正しいです。当分の間、Tim氏が書いたクエリは欠陥なく動作するはずですが、SQLについてもう少し詳しく読んで、スキーマを作成する時間を費やしたいと思うかもしれません。 – dweiss

+0

質問は素晴らしい人に感謝し、授業に感謝します。私が今直面している問題は、phpmyadminのクエリがWebページ上で動作することです。初めてこれまで実行したことがありましたら、どんな経験もありがとうございます。 – Andrew

+0

@Andrew私は確信していません。あなたが新しいStackOverflow質問を開いて、あなたの問題を完全に説明したなら、おそらく最も良いでしょう。 –

5

、あなたは可能性があなたの非凝集フィールドでグループ(すなわち名前、クラス、characterid)。このようにして集計を使用することができます:最大、合計、そしてあなたはまだあなたの別の文字を持っています!

+0

私はあなたに投票したいと思いますが、私は15人の担当者が必要です:) ありがとうございます! – Andrew

+0

ありがとう! Timが上記の書き込みを使用しますが、彼と私のコメントを考慮してください。 – dweiss

+0

@ user1366982また、dweissの回答が最も役に立つと分かった場合は、緑色のチェックマークをクリックして回答を許可することができます。 –

関連する問題