sql - 在 SQL 中使用 RANK() OVER 将 rank 设置为 NULL

标签 sql null rank

在 SQL Server 数据库中,我有一个我对排名感兴趣的值表。

当我执行 RANK() OVER (ORDER BY VALUE DESC) 作为 RANK 时,我得到以下结果(在假设表中):

RANK | USER_ID   | VALUE
------------------------
1   | 33        | 30000
2   | 10        | 20000
3   | 45        | 10000
4   | 12        | 5000
5   | 43        | 2000
6   | 32        | NULL
6   | 13        | NULL
6   | 19        | NULL
6   | 28        | NULL

问题是,我不希望 VALUE 具有 NULL 的行获得排名 - 我需要某种方法将这些行的排名设置为 NULL。到目前为止,在网上搜索并没有给我带来关于我如何能够做到这一点的答案。

感谢您的任何帮助,您可以提供。

最佳答案

您可以尝试使用 CASE 语句:

SELECT
    CASE WHEN Value IS NULL THEN NULL
         ELSE RANK() OVER (ORDER BY VALUE DESC)
    END AS RANK,
    USER_ID,
    VALUE
FROM yourtable

关于sql - 在 SQL 中使用 RANK() OVER 将 rank 设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3676875/

相关文章:

c# - 重载相等运算符 == 如何真正起作用?

python - 获得滚动百分位数排名的快速方法

SQL Server Management Studio 2012 - 将数据库的所有表导出为 csv

mysql - 将多个值连接到虚拟列

mysql - DriverManager 仅在 Tomcat 上保持返回空连接(在 Glassfish 上工作正常)

mysql - 查找数据库中丢失的数据

python - groupby 返回第 n 组 - 不是行

按另一个变量分组的 r 数据表中的排名值

php - 无法使用 PHP PDO 查询 MS Access 数据库中保存的查询

MySql Join - 如何获取相关行以外的所有行?如何在连接表中求和?