2012-03-16 11 views
6

私は、プレーヤに関するデータと今シーズンボーリングした試合をリーグ中にボーリングセンターで持っているテーブルをいくつか持っています。この特定のクエリが使用されているのは、今年の男性と女性のトップXの平均を並べ替えることです。私はこれをすべて持っていますが、いくつかの選手が複数のリーグでプレーし、トップXに2つ以上の平均を持っている場合には、まだ問題があります。SQLクエリ内の個々のレコードごとに最大平均を取得

明らかに、プレイヤーAの平均値がリーグABCで200、リーグDEFで198で2番目に高い場合、私は200のリストを望むだけです。

ここでは、手動で重複を削除する必要があるか、別の言語でソーターを作成する必要があるので、私は変更したい単純なバージョンのクエリーですが、純粋なSQL 。 (私はこの例のクエリから無関係な情報を除去):

SELECT playerId, ROUND(AVG(score),2)Average, season, leagueName, COUNT(score)NumGames FROM Scores 
WHERE season = '2011-2012' AND score > -1 
GROUP BY season, playerID, leagueName 
ORDER BY Average DESC LIMIT 0,30 

基本的に、Scoresテーブルは、個々のゲーム、playerId、ゲームがプレイされた季節とleagueName(及び他の列含有しますこの例では必須ではありません)。

WHEREは、ゲームが今シーズンに行われ、スコアが正であることを確認することです(-1は人がいない場合)。私はすべてのシーズンをplayerIDとleagueNameでグループ化するので、異なるリーグでプレーされたすべてのゲームの平均ではなく、各プレイヤーの平均PER LEAGUEを取得します。

キーワードDISTINCTを使用しようとしましたが、1つの列に対してDISTINCTを使用できないため、これは機能しません。私も他のものを試してみましたが、そのうち誰も作業に近づいていませんでしたので、これを実行することが可能かどうか、または別の言語を使用してこの結果セットをソートして重複を取り除く必要があるかどうか疑問です。

答えて

3

あなたは、サブクエリでのリーグごとのプレーヤーあたりの平均を計算することができます:これは素晴らしいです

select playerId 
,  max(league_avg.score) 
from (
     select playerId 
     ,  avg(score) as score 
     from Scores 
     where season = '2011-2012' 
       and score > -1 
     group by 
       playerId 
     ,  leagueName 
     ) as league_avg 
group by 
     playerId 
+0

一時テーブルを必要とせずに単一のクエリで動作するので、これは私の好みの答えです。ありがとう、トン! –

1

OKこれは少し難題です。私はあなたがテンポラリテーブルを生成するためにSELECT xxx INTOテーブルを使用できると仮定していますか?その場合、これらの2つの選択肢は、あなたが望むものを得るでしょう:

まず、上記のクエリでは、tmpscoresというテーブルが作成されたと仮定しています。

次にあなたがベストスコア、各プレイヤーのために、取得する必要があります:

select playerID, MAX(average) AS bestscore 
INTO bestscores 
FROM tmpscores 
GROUP BY playerID, season 

最後に、ゲームの適切なリーグと番号を取得するためにbestscoresと再加入一時得点を取る:

SELECT bs.playerId, bs.bestscore, ts.season, ts.leaguename, ts.numgames 
    FROM bestscores bs 
    JOIN tmpscores ts ON bs.playerID = ts.playerId and bs.bestscore = ts.average 

ありがとうございます!すべてSQLで。

希望すると助かります!

+0

、私はいくつかのことを変更しなければならなかったものの、それは、働いて得ました。あなたの最初のSQLクエリから「INTO bestScores」を差し引いたtmpScoresを作成し、SELECTに必要なフィールドを追加しました.tmpScoresには必要なすべてのデータがすでに含まれています。おかげで、これは本当に私を助けました:) –

+0

それはあなたのために働いてうれしい@アダム! –

関連する問題