Sql 红移:使用带条件的秩
我正在尝试添加一个排名编号,仅适用于已交付的购物车。我尝试了下面的代码,但没有得到预期的结果 我们可以在单个查询中实现这一点,或者我们需要为交付的Cart编写一个子查询并生成一个排名。请在此提出建议 数据: 客户识别码 车号 购物车的当前状态 排名 已交付\u等级 1. 100 交付 1 1 1. 110 取消 2 NULL 1. 220 交付 3 2Sql 红移:使用带条件的秩,sql,amazon-redshift,Sql,Amazon Redshift,我正在尝试添加一个排名编号,仅适用于已交付的购物车。我尝试了下面的代码,但没有得到预期的结果 我们可以在单个查询中实现这一点,或者我们需要为交付的Cart编写一个子查询并生成一个排名。请在此提出建议 数据: 客户识别码 车号 购物车的当前状态 排名 已交付\u等级 1. 100 交付 1 1 1. 110 取消 2 NULL 1. 220 交付 3 2 您可以在此处使用COUNT作为分析函数以及CASE表达式: 选择 客户识别码, 车号, 目前的状况, 在(按客户id按订单按购物车id划分)购物
您可以在此处使用
COUNT
作为分析函数以及CASE
表达式:
选择
客户识别码,
车号,
目前的状况,
在(按客户id按订单按购物车id划分)购物车排名asc上的稠密排名(),
当前_状态为“已交付”时的情况
然后计数(当前_状态为“已交付”然后为1结束时的情况)
(按客户id划分按购物车id划分订单)结束交货等级
来自销售部的详细信息
订购人
客户识别码,
购物车id;
上面使用的
CASE
表达式将为非状态传递记录的任何记录呈现NULL
。否则,它将显示每个客户记录块的已交付记录的滚动计数。我将通过两种方式调整您的查询
cart\u当前\u状态添加到分区中
交付的
购物车都有自己的排名,所有取消的
购物车都有自己的排名
案例中
表达式中,以仅包括已交付
购物车的排名取消的
购物车的排名变为空
注意:根据您的数据和解释,
COUNT(*)
,SUM(1)
,densite\u RANK()
,等等,都会给出相同的结果。请通过添加示例数据,将此作为一个完整的问题。通过一些示例源数据,我们可以看到您正在处理和未处理的场景,然后,您还可以提供从该示例源数据预期的示例结果。这使我们能够验证我们的理解,并证明任何答案都会产生您期望的结果。@TimBiegeleisen:添加了示例数据
SELECT
customer_id,
cart_id,
current_status,
DENSE_RANK() OVER (PARTITION BY customer_id ORDER BY cart_id) AS cart_rank_asc,
CASE
WHEN cart_current_status = 'DELIVERED'
THEN DENSE_RANK() OVER (PARTITION BY customer_id, cart_current_status ORDER BY cart_id)
END
AS delivered_rank
FROM
sales_details
ORDER BY
customer_id,
cart_id;