在同一个 SQL 查询中使用 rank() 和 count()
Posted
技术标签:
【中文标题】在同一个 SQL 查询中使用 rank() 和 count()【英文标题】:Use rank() en count() in same SQL query 【发布时间】:2020-06-27 14:43:04 【问题描述】:应该不会很难,但我不会这么快。
我想选择所有客户,每个客户的订单数量count()
和基于此计数的dense_rank()
。
我已尝试以下查询。但这会为所有行提供值“1”作为 RankNumber。
select *, Dense_RANK() over(partition by NrOrders order by NrOrders desc) as RankNumber
from(
select CustomerID, count(*) as NrOrders
from Orders
group by CustomerID
) cpc
所以想要的结果是。
CustomerID NrOrders RankNumber
1 6 1
2 3 2
3 3 2
4 2 3
【问题讨论】:
客户的订单数量真的不同吗? 您能否在您的预期输出中添加一些示例数据? @mkRabbani 我刚刚做了。希望我的问题现在很清楚。 【参考方案1】:您的代码的问题是窗口函数的分区子句。它根据客户的订单数将客户分为不同的组,而您希望所有行位于同一分区中,按订单数降序排列。
另外,不需要子查询,可以直接在聚合查询中使用窗口函数。
考虑:
select
CustomerID,
count(*) as NrOrders,
dense_rank() over(order by count(*) desc) rn
from Orders
group by CustomerID
order by NrOrders
【讨论】:
以上是关于在同一个 SQL 查询中使用 rank() 和 count()的主要内容,如果未能解决你的问题,请参考以下文章