首页 > 解决方案 > 在 SQL Server 中使用 Join 查询获取最大值

问题描述

我有一个用户表:

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

和用户点

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

和用户地址

|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

对于上述查询,我​​得到了相同的结果。但我想要的是哪个查询更好地考虑性能。

请建议

标签: sqlsql-servertsql

解决方案


MinPoints这将返回一个或多个等于最大值的用户的所有用户数据MinPoints。使用示例数据,JOIN将起作用,但您可能需要它们为LEFT JOINs。

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)

推荐阅读