2011-10-21 152 views
0

我想要顯示一個高分,只有UserID只能顯示一次。和TrixPoints總結在一起是最高分最高,我該怎麼做?MAX和SUM SQL Server

我有三個表:

tblUser 
*UserID 
FirstName 
LastName 

tblTrix 
*TrixID 
TrixPoints 
TrixName 

tblUserTrix 
*TrixID 
*UserID 

這是我的SQL這dosent工作,因爲我想:

SELECT MAX(tblUser.UserID) AS UserID, 
     MAX(tblUserTrix.TrixID) AS TrixID, 
     SUM(tblTrix.TrixPoints) AS TrixPoints 
FROM tblUser INNER JOIN 
    tblUserTrix ON tblUser.UserID = tblUserTrix.UserID INNER JOIN 
    tblTrix ON tblUserTrix.TrixID = tblTrix.TrixID 
WHERE tblUser.UserID = tblUserTrix.UserID 
GROUP BY tblTrix.TrixPoints 
ORDER BY tblTrix.TrixPoints 

的問題是,我得到了很多相同的用戶名的。 SUM劑量將所有TrixPoint合併在一起。

回答

3
select ut.UserId, sum(t.TrixPoints) as TotalTrixPoints 
from tblUserTrix ut 
inner join tblUser u 
on ut.UserId = u.UserId 
left join tblTrix t 
on ut.TrixId = t.TrixId 
group by ut.UserId 
order by TotalTrixPoints desc 

你在做什麼錯在您的查詢,第一關你是錯誤的領域分組。您不想按點分組,因爲這將是數據庫引擎如何找到匹配以彙總結果。而你的選擇功能有點偏離。試試我的解決方案,讓我知道它是否給你你想要的東西。

此外,您的ORDER BY使用默認asc,但它看起來像你想要它在相反的順序,所以你需要指定desc

+0

[不良習慣踢:ORDER BY序數(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/06/bad-habits-to-kick-order-by-ordinal .aspx) –

+1

@MartinSmith好點,我編輯了我的查詢來踢這種壞習慣。 – 2011-10-21 14:43:58

+0

完全像我想要的一樣!十分感謝! – user1007103

1

如果我理解正確你的問題,然後這應該工作:

SELECT tblUser.UserID) AS UserID, SUM(TrixPoints) AS TrixPoints 
FROM tblUser 
INNER JOIN tblUserTrix 
ON tblUser.UserID = tblUserTrix.UserID 
INNER JOIN tblTrix 
ON tblUserTrix.TrixID = tblTrix.TrixID 
GROUP BY tblUser.UserID 
1
SELECT tu.UserID, SUM(tt.TrixPoints) AS TotalTrixPoints 
FROM tblUser tu 
INNER JOIN tblUserTrix tut ON tu.UserID = tut.UserID 
INNER JOIN tblTrix tt ON tut.TrixID = tt.TrixID 
GROUP BY tu.UserID 
ORDER BY TotalTrixPoints DESC