Sql Server 排名值没有改变请帮助

0 mysql sql-server

如何将此(MySQL 查询)转换为 SQL Server?

或者如何在我在查询中使用 where 时获得不改变的排名值:

SELECT id, 
       name, 
       score, 
       FIND_IN_SET( score, (SELECT GROUP_CONCAT( DISTINCT score
                            ORDER BY score DESC ) FROM scores)
                  ) AS rank
FROM scores WHERE name = A;
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 5

无需复杂的-和昂贵-FIND_IN_SET()GROUP_CONCAT()解决方案。您只需要以下DENSE_RANK()功能:

SELECT 
    id, name, score, 
    DENSE_RANK() OVER (ORDER BY score DESC) AS rank
FROM scores ;
Run Code Online (Sandbox Code Playgroud)

如果你想添加一个WHERE子句,比如说WHERE name = 'C'并且仍然获得排名 - 在表的所有行中 - 你可以使用 CTE 或派生表:

-- derived table
SELECT d.*
FROM
  (
    SELECT 
        id, name, score, 
        DENSE_RANK() OVER (ORDER BY score DESC) AS rank
    FROM scores
  ) AS d
WHERE d.name = 'C' ; -- arbitrary `WHERE`

-- CTE
WITH d AS
  (
    SELECT 
        id, name, score, 
        DENSE_RANK() OVER (ORDER BY score DESC) AS rank
    FROM scores
  )
SELECT d.*
FROM d
WHERE d.name = 'C' ; -- arbitrary `WHERE`
Run Code Online (Sandbox Code Playgroud)