2011-10-21 15 views
0

UserIDだけが一度表示できるということで、最高値を表示したい。最高の得点が上にあるTrixPointsが合計されます。どうすればいいですか?MAXとSUM SQL Server

は、私は3つのテーブルを持っている:

tblUser 
*UserID 
FirstName 
LastName 

tblTrix 
*TrixID 
TrixPoints 
TrixName 

tblUserTrix 
*TrixID 
*UserID 

これは私が好きな仕事をdosent私のSQLです:

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 

問題は、私は同じユーザーIDの多くを得ることです。そして、SUMはすべてのTrixPointsを合計します。

答えて

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 

あなたは間違ったフィールドでグループ化されている最初のオフ、あなたのクエリで間違ってやっています。ポイントごとにグループ化することは望ましくありません。これは、dbエンジンがどのようにして結果を集計するかを見つけるためです。そして、あなたの選択機能は少しオフです。私の解決策を試して、あなたが探しているものがあれば教えてください。

また、あなたのORDER BYはデフォルトascを使用されていますが、逆の順序でそれをしたいので、あなたがdescを指定する必要がありますように見えます。

+0

[キックする悪い習慣:序BY ORDER](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/06/bad-habits-to-kick-order-by-ordinal .aspx) –

+1

@MartinSmith良い点、私はその悪い習慣をキックするために私のクエリを編集しました。 –

+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