2012-05-05 10 views
2

ウェブサイトで数時間の検索を行った後、私は自分の問題に対する正解を見つけることができず、答えが複雑になりました。 私はminecraftserverからいくつかの統計を持っており、どのブロックが誰によって作成されたのかを知りたいのです。だから私はGROUP BYとMAXで始まったが、正しい値を返さなかった。 MAX値は良好ですが、itemidとplayeridと競合します。最初のIDとプレイヤー名を選択するだけです。 (注:各playeridは、項目ごとに別々の行を有する!!!)クエリは次の通りである:プレイヤー名が存在しているMAXとGROUP BYは良い値を返さない

SELECT `playername` , `itemid` , MAX(destroyed) 
FROM `blockstats_typed` 
GROUP BY `itemid` 
LIMIT 0 , 30 

フィールド、作成および破棄、アイテムID。私はあなたが私を助けることができることを願っています...

詳細が必要な場合は、ちょうどそう言う!

編集1(表のスキーマ):

id   int(10)   id of the row (AI) 
playername varchar(50)  playername 
itemid  smallint(5)  id of the item 
created  int(10)   times created 
destroyed int(10)   times destroyed 
+1

あなたは 'playername'でもグループ化する必要があります。私は誤りではないことに驚いています。 –

+1

MySQL(とPostgreSQLのほうがはるかに限定された方法でのみ)では、SELECTリストにあり、集計ではないGROUP BY句からの列(式)を省略できます。アイテムID、破壊された最大回数、およびそれを行ったユーザーIDが必要な場合は、より複雑なクエリを作成する必要があります。 –

+0

@JonathanLeffler:SQLiteはMySQLが "ランダムなものを選ぶ"のですが、PostgreSQLでは、PKでグループ化し、バージョン9.1+(両方でAFAIK)を使用している場合、それを取り除きましょう。 –

答えて

1

のみのMySQLとPostgreSQL(しかし、PostgreSQLははるかに限られた方法でそれをしない; とコメントがSQLiteの模倣MySQLは、このがでていることを私に告げる)あなたを許しますSELECTリスト内にあるが集計ではないGROUP BY句からの列(式)を省略することができます。アイテムID、破壊された最大回数、およびそれを行ったユーザーIDが必要な場合は、より複雑なクエリを作成する必要があります。

だから、あなたは後に次のようになります。

SELECT playername, itemid, MAX(destroyed) 
    FROM blockstats_typed 
GROUP BY playername, itemid 
LIMIT 0, 30 

それとも、後に次のようになります。

SELECT b.PlayerName, s.ItemID, s.MaxDestroyed 
    FROM BlockStats_Typed AS b 
    JOIN (SELECT ItemID, MAX(Destroyed) AS MaxDestroyed 
      FROM BlockStats_Typed 
     GROUP BY ItemID 
     LIMIT 0, 30 
     ) AS s 
    ON b.ItemID = s.ItemID AND b.Destroyed = s.MaxDestroyed; 

いくつかのアイテムが2人の選手によって、たとえば、237,000回を破壊された場合、あなたが得ることに注意してください両方のプレイヤーの名前を返す(そのItemIDがもちろんトップ30にある場合)。

どちらも有効なクエリです。しかし、彼らは異なったことをする。もしあなたがしようとしていることが正しい場合は、それを判断する必要があります。どちらも正しいとしない場合は、おそらくあなたの質問を明確にする必要があります。

(私が書いたところではLIMITが許されているとは確信していませんが、最後に置いてください)そして、DESC修飾子を付けてORDER BY節を追加して、 GROUP BYはソートを保証しません)。

+0

これはトリックでした、ありがとう!私はあなたにそれの信用を与えるだろう、ユーザーがそれを感謝することを願って! :) –

関連する問題