是否有任何选项可以将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子句的工作方式非常不同(作为解析函数),这不是我想要的结果.
是否有任何选项可以将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子句的工作方式非常不同(作为解析函数),这不是我想要的结果.
您可以通过获得低于该值的所有值的最高排名来计算出排名.如果没有,那就是ISNULL
比1
.
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;