2

2つのテーブルがあります(MS Access)

tblInput

イベント、ユーザーID、スコア
EventA、1、50
EventA、2、55
EventB、1、45
EventB、2、33

tblUser

ID、名前
1、ジョン
2、アレックス

各イベントの当選スコア、イベント、人物の名前を表示する必要があります。この例の出力は次のようになります

イベント、名前、スコア
EventA、アレックス、55歳
EventB、ジョン、45歳

イベントとトップスコアを取得するためにこれを試しました:

SELECT Max(Score), Event FROM tblInput GROUP BY Event;

ただし、ID(名前の代わりに使用しているものを、テーブルを結合すると名前に戻すことができる)を選択しようとすると、望まない集計関数にする必要があります。 Groupbyステートメントに配置します。次のようになります。

SELECT Max(Score) AS Score, Event, ID FROM tblInput GROUP BY Event, ID;
スコア、イベント、ID
165 EventA 2
173 EventA 9
170 EventA 32
211 EventB 10
224 EventB 14
256 EventC 16
188 EventC 17

どんな助けでもありがたいです、貧弱なフォーマットのために申し訳ありません。

4

3 に答える 3

2

次のようなクエリを1つ作成します。

SELECT 
 Max(Score) as topscore, 
 ChildEvent 
FROM 
 T_Participation 
GROUP BY ChildEvent

次に、最初のクエリで作成された2番目のクエリと、イベントとスコアの両方で結合された入力テーブル:

select
 childEvent,
 topscore,
 StudentID
from
 query1 q inner join
 t_participation p on
 q.childevent = p.childevent and
 q.topscore = p.score

最高スコアのユーザーが複数いる場合はどうなりますか?イベントAの場合と同様に、ユーザー3のスコアは55ですか。

于 2012-08-30T18:43:55.407 に答える
1

できるよ:

SELECT T_Input.Event, T_User.Name, T_Input.Score
FROM
    (SELECT Max(Score), Event FROM T_Input GROUP BY Event) AS maxScores,
    T_User,
    T_Input
WHERE maxScores.score = T_Input.score
    AND maxScores.Event = T_Input.event
    AND T_User = T_Input.UserId
于 2012-08-30T19:01:30.917 に答える
1

これが1つのステートメントでそれを行うことができる方法です。イベントとその最大スコアのテーブルを作成する必要があります。次に、そのテーブルを入力テーブルに結合します。この例のテーブル名はT_Inputですが、実装ではT_Participationを使用しています。正しいテーブル名であるT_InputをT_Participationに置き換えてください。

SELECT T.EVENT, T.Score,  U.Name 
FROM T_Input T
    INNER JOIN T_User U ON T.UserID = U.UserID
INNER JOIN 
(
    SELECT Event, MAX(Score) [Score]  
    FROM T_Input T2
        INNER JOIN T_User U2 ON T2.UserID = U2.UserID
    GROUP BY EVENT
)Top_scores ON T.EVENT = Top_scores.EVENT AND T.Score = Top_Scores.Score
于 2012-08-30T18:59:24.613 に答える