Запрос на получение значения Max с помощью Join in SQL Server - PullRequest
0 голосов
/ 06 ноября 2019

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

|Username|UserType|
|John    |A       |
|Mary    |A       |
|Anna    |B       |

и UserPoints

|UserType|MinPoints|Level  |
|A       |100      |Bronze |
|A       |200      |Silver |
|A       |300      |Gold   |
|B       |500      |Bronze |

и Useraddress

|UserType|Address
|A       |Address1
|B       |Address2

Я ищу запрос, чтобы получитьмаксимальное значение столбца MinPoints.

Я хочу получить результат без использования предложения Group by. Я попробовал следующее

Select UserType,UA.Address
,(Select max(MinPoints) from Users T1 WHERE T1.Usertype=U.Usertype)MinPoints from Users U
Left Join UserAddress UA on UA.UserType=U.UserType
Select UserType,UA.Address,MinPoints 
from Users U
Left Join UserAddress UA on UA.UserType=U.UserType
Left Join (Select UserType,max(MinPoints) from Users T1 Group by UserType) x ON X.Usertype=U.Usertype

Для вышеупомянутых запросов я получил тот же результат. Но я хочу, чтобы запрос лучше учитывал производительность.

Пожалуйста, предложите

1 Ответ

0 голосов
/ 06 ноября 2019

Это вернет все пользовательские данные для пользователя или пользователей, чьи MinPoints равны максимальному значению MinPoints. С примерами данных будет работать JOIN, но вам может потребоваться, чтобы они были LEFT JOIN s.

SELECT
  u.UserName,
  ua.Address,
  up.MinPoints AS MaxOfMinPoints
FROM
  UserPoints AS up
  JOIN
  Users AS u
    ON u.UserType = up.UserType
  JOIN
  UserAddress AS ua
    ON ua.UserType = up.UserType
WHERE
  up.MinPoints = (SELECT MAX(s.MinPoints) FROM UserPoints AS s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...