【力扣sql】高频 SQL 50 题(基础版)

1174

获取即时订单在所有用户的首次订单中的比例。

保留两位小数。

配送表: Delivery

+-----------------------------+---------+
| Column Name                 | Type    |
+-----------------------------+---------+
| delivery_id                 | int     |
| customer_id                 | int     |
| order_date                  | date    |
| customer_pref_delivery_date | date    |
+-----------------------------+---------+
select  round(100*sum(order_date = customer_pref_delivery_date)/count(*),2) immediate_percentage
from (select *,
    row_number()over(partition by customer_id order by order_date) posn 
    from Delivery) d
where posn = 1

注意:顾客可能有几个订单在同一最早日期创建。因此,选择排序窗口函数时,row-number()over()最佳。

row_number()over()是连续型排序:9,9,8,7  排序为:1,2,3,4

而 rank()over()是跳跃型排序:9,9,8,7  排序为:1,1,3,4

dense_rank()over()是并列连续型排序:9,9,8,7  排序为:1,1,2,3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值