Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按计数和排名分组的TSQL_Sql_Sql Server_Tsql_Sql Server 2012_Dense Rank - Fatal编程技术网

按计数和排名分组的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