是否有任何选项可以将SQL Server中的RANK/Dense_RANK函数用作聚合?例如,Oracle/postgres中的以下查询根据订单的毛值返回Orders表中值200的假设排名.

 SELECT RANK(200) WITHIN GROUP (ORDER BY gross_value ASC)
   FROM orders;

RANK/DENSE_RANK WITH OVER子句的工作方式非常不同(作为解析函数),这不是我想要的结果.

推荐答案

您可以通过获得低于该值的所有值的最高排名来计算出排名.如果没有,那就是ISNULL1.

SELECT ISNULL(MAX(rn) + 1, 1)
FROM (
    SELECT rn = RANK() OVER (ORDER BY gross_value)
    FROM orders
    WHERE gross_value < 200
) t;

对于降序,你可以这样做

SELECT ISNULL(MAX(rn) + 1, 1)
FROM (
    SELECT rn = RANK() OVER (ORDER BY gross_value DESC)
    FROM orders
    WHERE gross_value > 200
) t;

Sql相关问答推荐

如何计算帐户在SQL中随着时间的推移购买的SKU数量?

在SQL中向每个子字节组添加字节行

使用SQL旋转表的列(Snowflake)

在SQL中使用类别值将行转置为列

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

替换上一个或下一个值中的空值并添加其价格日期

使用Kotlin Exposed SQL DSL Select 多个值并排序

我怎样才能得到列值对应的最大值在另一个?

了解多个分组集

如何简化此PostgreSQL查询以计算平均值?

如何在Postgres中为单值输入多行?

使用同一个表,为什么IN、NOT IN、NOT EXISTS和EXISTS有不同的输出?

同时插入和更新记录

如何根据 Google BigQuery 中的特定列值连接一列的 N 行?

两个具有 NULL 值的表达式结果之间的差异

如何获取每个组中最近的n条记录并将它们聚合成数组

SQL Select 最大并获取列名

计算 PostgreSQL 中的平均会话长度

如何在 RavenDB Studio (RQL) 中插入更新文档

如何在 Trino/Presto 中过滤掉 map 中的某些键?