按计数和排名分组的TSQL
假设我有以下几点:按计数和排名分组的TSQL,sql,sql-server,tsql,sql-server-2012,dense-rank,Sql,Sql Server,Tsql,Sql Server 2012,Dense Rank,假设我有以下几点: 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()或densit
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()或densite_Rank()根据计数获得排名?如果需要排名列,可以将其与
分组依据一起使用:
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;
如果您想要排名列,可以将其与分组依据一起使用
:
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;
试试这个:
SELECT *
, RANK() OVER(ORDER BY totals DESC) AS Rank
FROM
(
SELECT Name,
COUNT(Name) AS TOTALS
FROM @Name
GROUP BY Name
) a
试试这个:
SELECT *
, RANK() OVER(ORDER BY totals DESC) AS Rank
FROM
(
SELECT Name,
COUNT(Name) AS TOTALS
FROM @Name
GROUP BY Name
) a
但是既然马克有3个,是他们中最多的,我怎么把他列为1呢?@ACsteel只是颠倒顺序--orderbycount(*)DESC
但是既然马克有3个,是他们中最多的,我怎么把他列为1呢?@ACsteel只是颠倒顺序--orderbycount(*)DESC