如何将此(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)
无需复杂的-和昂贵-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)
归档时间: |
|
查看次数: |
59 次 |
最近记录: |