2012-08-30 49 views
2

我有兩個表(MS接入)SQL - 無法分組查詢工作

tblInput

Event, UserID, Score 
EventA, 1, 50 
EventA, 2, 55 
EventB, 1, 45 
EventB, 2, 33

tblUser

ID, Name 
1  , John 
2  , Alex

我需要顯示每個事件的獲勝分數,事件和人的名字。在這個例子中輸出應該是

Event, Name, Score 
EventA, Alex, 55 
EventB, John, 45

我已經試過這讓事件和最高分:

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

但是,如果我儘量選擇ID(我只是用在地名的,可當我連接表改回名字),我不得不使其聚合函數,我不想,或將其放置在GROUP BY語句,我得到的東西像

SELECT Max(Score) AS Score, Event, ID FROM tblInput GROUP BY Event, ID; 
Score, Event, ID 
165 EventA 2 
173 EventA 9 
170 EventA 32 
211 EventB 10 
224 EventB 14 
256 EventC 16 
188 EventC 17

任何幫助表示讚賞,抱歉格式不佳。

+0

是這個家庭作業? – Beth

+0

一個賦值實際上是爲了構建一個數據庫,而不是具體查詢,但是我想添加它們,只是一直未能找到解決方案,嘗試了很多次而沒有成功。謝謝njk,格式化有助於很多=) – Deley

+0

事件表T_Input中的每一行都有唯一的ID嗎?因爲你需要一個。 – Fionnuala

回答

2

創建一個這樣的查詢:

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

然後第二個與第一查詢生成和您的輸入表上的兩個事件加入和評分:

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?

+0

好吧,我試過了,它的工作原理。我不知道你可以用'query1 q'替代別名,這很有幫助。我不得不爲內部查詢進行別名,因爲它試圖讀取哪個表中的含糊不清。至於你的問題,這兩個記錄將出現。之前我曾嘗試過這樣的事情,但沒有最後一次內部連接。這真的有助於感謝,並幫助我更好地理解,這對我而言比成績更重要。謝謝。 – Deley

1

以下是您可以在一個聲明中完成的方法。你需要創建一個事件表和他們的最高分。然後將該表加回到您的輸入表。你的例子有你的表名作爲T_Input,但你的實現使用T_Participation。請用T_Participation代替T_Input,它是正確的表名。

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 
+0

謝謝羅德尼,很高興看到如何得到解決方案的變化,明天將明確玩弄這兩個樣本,並獲得更好的SQL感覺。謝謝。 – Deley

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 
+0

我不確定在第3行,這對我來說沒有意義嗎?並且列在FROM語句中? – Deley

+0

@Deley它是一個子查詢,可以像查詢表一樣使用查詢結果。通過這種方式,您可以限制表中的數據,然後將其與其他表(或子查詢)結合以獲得您要查找的結果。 –