2016-06-09 76 views
0

比方說,我有以下幾點:TSQL與GROUP BY計數和排名

DECLARE @Name TABLE (Name VARCHAR(MAX)); 

INSERT INTO @Name VALUES ('bob'),('bob'),('john'),('john'),('mark'),('mark'),('mark'),('lisa'); 

SELECT Name, 
COUNT(Name) AS TOTALS 
FROM @Name 
GROUP BY Name 
ORDER BY TOTALS DESC; 

如何我也用RANK()或DENSE_RANK(),以獲得基於計數的排名?

回答

2

如果你想要一個排名列,您可以用group by使用它:

SELECT n.Name, COUNT(*) as TOTALS, 
     RANK() OVER (ORDER BY COUNT(*) DESC) as Total_Rank 
FROM @Name n 
GROUP BY n.Name 
ORDER BY TOTALS DESC; 
+0

但由於標記有3個,最出所有的人的,我怎麼在Total_Rank中顯示他爲1? – MilesMorales

+1

@ACsteel只需顛倒順序 - 'ORDER BY COUNT(*)DESC' –

1

試試這個:

SELECT * 
    , RANK() OVER(ORDER BY totals DESC) AS Rank 
FROM 
(
    SELECT Name, 
    COUNT(Name) AS TOTALS 
    FROM @Name 
    GROUP BY Name 
) a