分组依据上的SQL Max

时间:2011-02-02 10:11:56

标签: sql sql-server

我陷入了一个非常简单的t-sql查询。请帮忙!

以下是我的结果集:

Percentage---FirstName---SessionId

34-----------ABC---------222
67-----------ABC---------333
11-----------ABC---------444
83-----------XYZ---------555
23-----------XYZ---------666
64-----------XYZ---------777

从上面,我想要每个用户的记录具有最大百分比,例如

Percentage---FirstName---SessionId
67-----------ABC---------333
83-----------XYZ---------555

我似乎无法做到这一点而且我很着急。请尽早帮忙。任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:8)

  SELECT MAX(Percentage) AS Percentage,
         FirstName
    FROM mytbl
GROUP BY FirstName

或者如果您需要会话ID:

    SELECT mytbl.*
      FROM mytbl
INNER JOIN (SELECT MAX(Percentage) AS Percentage,
                   FirstName
              FROM mytbl
          GROUP BY FirstName) x ON x.Percentage = mytbl.Percentage
                               AND x.FirstName = mytbl.FirstName 

答案 1 :(得分:6)

如果您需要处理关系,那么您可能希望使用窗口函数(假设您使用的是SQL Server 2005或更高版本):

SELECT
    *
FROM
    (SELECT mytbl.*,RANK() OVER (PARTITION BY FirstName ORDER BY Percentage desc) as rn) t
WHERE
    t.rn = 1

因此,如果有两行具有相同的百分比,则它们都将被返回。如果您只想要一个结果,那么您可以在ORDER BY子句中添加其他“tie-breaker”列,或者从RANK()切换到ROW_NUMBER()