MAX и SUM SQL Server - PullRequest
       14

MAX и SUM SQL Server

0 голосов
/ 21 октября 2011

Я хочу отобразить рекорд, если идентификатор пользователя может отображаться только один раз.И TrixPoints суммируются вместе, где наивысший балл на вершине, как мне это сделать?

У меня есть три таблицы:

tblUser
*UserID
FirstName
LastName

tblTrix
*TrixID
TrixPoints
TrixName

tblUserTrix
*TrixID
*UserID

Это мой 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 

Проблема в том, что я получаю много одного и того же идентификатора пользователя.И СУММА отправляет СУММУ все TrixPoints вместе.

Ответы [ 3 ]

3 голосов
/ 21 октября 2011
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.

1 голос
/ 21 октября 2011
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
1 голос
/ 21 октября 2011

Если я правильно понял ваш вопрос, тогда это должно сработать:

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
...