文章目录

  • 示例表和数据
  • 按照产品分类的销售排行榜
  • 按照产品分类的销量飙升榜
  • 总结

大家好,我是只谈技术不剪发的 Tony 老师。不知道你有没有注意过,在亚马逊或者京东等电商平台的网站上都提供了准实时的产品分类销售排行榜。例如,以下就是亚马逊上销售排行榜和销售飙升榜的一个截图:

今天我们就来讨论一下如何使用 SQL 排名窗口函数和取值窗口函数实现这类功能。关于窗口函数的介绍和聚合窗口函数的应用案例可以参考实战 SQL:银行等金融机构可疑支付交易的监测。

本文使用的函数和示例经过以下数据库验证:MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。它们支持的常用排名窗口函数和取值窗口函数如下:

窗口函数 描述 MySQL Oracle SQL Server PostgreSQL SQLite
ROW_NUMBER() 为分区中的每行数据分配一个从 1 开始的序列号。 ✔️ ✔️ ✔️ ✔️ ✔️
RANK() 计算每行数据在分区中的名次,排名可能产生跳跃。 ✔️ ✔️ ✔️ ✔️ ✔️
DENSE_RANK() 计算每行数据在分区中的名次,排名不会产生跳跃。 ✔️ ✔️ ✔️ ✔️ ✔️
PERCENT_RANK() 计算每行数据在分区中的相对排名,取值为 (rank - 1) / (rows - 1)。 ✔️ ✔️ ✔️ ✔️ ✔️
CUME_DIST() 计算每行数据在分区内的累积分布,取值范围大于 0 且小于等于 1。 ✔️ ✔️ ✔️ ✔️ ✔️
NTILE() 将分区内的数据分为 N 等份,计算每行数据所在的位置。 ✔️ ✔️ ✔️ ✔️ ✔️
FIRST_VALUE() 返回窗口内第一行对应的数据。 ✔️ ✔️ ✔️ ✔️ ✔️
LAST_VALUE() 返回窗口内最后一行对应的数据。 ✔️ ✔️ ✔️ ✔️ ✔️
LAG() 返回分区中在当前行之前第 N 行对应的数据。 ✔️ ✔️ ✔️ ✔️ ✔️
LEAD() 返回分区中在当前行之后第 N 行对应的数据。 ✔️ ✔️ ✔️ ✔️ ✔️
NTH_VALUE() 返回窗口内第 N 行对应的数据。 ✔️ ✔️ ✔️ ✔️

示例表和数据

本文使用以下简化的示例表和数据(纯属虚拟,不代表实际销量):

create table products(product_id integer not null primary key,product_name varchar(100) not null unique,product_subcategory varchar(100) not null,product_category varchar(100) not null
);insert into products values(1, 'iPhone 11', '手机', '手机通讯');
insert into products values(2, 'HUAWEI P40', '手机', '手机通讯');
insert into products values(3, '小米10', '手机', '手机通讯');
insert into products values(4, 'OPPO Reno4', '手机', '手机通讯');
insert into products values(5, 'vivo Y70s', '手机', '手机通讯');
insert into products values(6, '海尔BCD-216STPT', '冰箱', '大家电');
insert into products values(7, '康佳BCD-155C2GBU', '冰箱', '大家电');
insert into products values(8, '容声BCD-529WD11HP', '冰箱', '大家电');
insert into products values(9, '美的BCD-213TM(E)', '冰箱', '大家电');
insert into products values(10, '格力BCD-230WETCL', '冰箱', '大家电');
insert into products values(11, '格力KFR-35GW', '空调', '大家电');
insert into products values(12, '美的KFR-35GW', '空调', '大家电');
insert into products values(13, 'TCLKFRd-26GW', '空调', '大家电');
insert into products values(14, '奥克斯KFR-35GW', '空调', '大家电');
insert into products values(15, '海尔KFR-35GW', '空调', '大家电');create table sales(product_id integer not null,sale_time timestamp not null,quantity integer not null
);insert into sales
with recursive s(product_id, sale_time, quantity) as (select product_id, '2020-07-23 00:01:00', floor(10*rand(0)) from productsunion allselect product_id, sale_time + interval 1 minute, floor(10*rand(0))from s where sale_time < '2020-07-23 10:00:00'
)
select * from s;

其中,products 是产品表,包含产品编号、产品名称、产品子类和产品分类;sales 是销量表,按照不同产品每分钟统计一次销量,我们生成了 2020 年 7 月 23 日 0 点到 10 点之间的模拟数据。

按照产品分类的销售排行榜

对于销售排行榜,我们需要按照产品的分类,计算最近一小时的销量排名。假如用户是 2020 年 7 月 23 日 10 点多查看排行榜,可以使用以下语句获取不同分类下销量排名前 3 的产品:

with hourly_sales(product_id, ymdh, quantity) as (select product_id, date_format(sale_time, '%Y%m%d%H'), sum(quantity)from saleswhere sale_time between '2020-07-23 09:00:00' and '2020-07-23 09:59:00'group by product_id, date_format(sale_time, '%Y%m%d%H')
),
hourly_rank as(select product_category, product_subcategory, product_name, quantity,rank() over (partition by ymdh, product_category order by quantity desc) as rkfrom hourly_sales sjoin products p on (p.product_id = s.product_id)
)
select *, repeat('												

实战 SQL:亚马逊、京东等电商平台的销售排行榜和飙升榜相关推荐

  1. 亚马逊跨境电商平台怎么入驻?

    有很多小伙伴在问:亚马逊跨境电商平台怎么入驻?? 听说电商开店真的很赚钱,想做却苦于自己不懂行没资源?电商规模小流水低不符合平台公会入驻条件,想入驻电商需要什么条件和多少钱呢?个体户能注册店铺吗等等问 ...

  2. 华钜同创:亚马逊跨境电商平台六大营销策略

    亚马逊跨境电商平台随着新卖家持续不断的涌入,加上平台现有品牌不断的加强投入,每月有超过20亿人访问亚马逊跨境电商平台.对于亚马逊卖家而言,如何才能在激烈的竞争中保持优势,并且让销售额持续增长呢? 一. ...

  3. 漂亮国站-亚马逊跨境电商平台新规定

    亚马逊跨境电商平台新规定,漂亮国政府正在提出改革方案,以确保漂亮国拥有"一流"的竞争制度.这其中包括支付用户撰写虚假评论为违法行为."漂亮国的经济复苏取决于我们开放市场的 ...

  4. 亚马逊跨境电商平台有什么特点

    电商的兴起无疑为实体行业的卖家提供了更优质的线上销售渠道,同时也为买家带来了巨大的便利.而亚马逊跨境电商平台是针对全球线上用户的购物平台,其用户注册量和商家数量都是非常庞大的.那么,亚马逊跨境电商平台 ...

  5. 怎么入驻亚马逊跨境电商平台?

    一.注册亚马逊卖家账号 想要在亚马逊开店卖货,我们首先要注册亚马逊开店卖家账号: 个人卖家注册需要:身份证,电话号码,干净的邮箱,visa信用卡,第三方收款账户等专业卖家注册需要: 公司营业执照,法人 ...

  6. 亚马逊跨境电商平台四大特点,你了解吗?

    近年来,电商行业正处于一个热点时期.国内电商已进入瓶颈阶段,产品同质化严重.许多店铺的卖家失去了竞争优势,价格战油然而起.目前中国国内电商发展受到阻碍,每天成千上万店铺没有订单可做,很多商家选择转型开 ...

  7. 无货源亚马逊跨境电商erp系统开发_独立源码_采集铺货

    一.什么是亚马逊跨境电商erp系统? 亚马逊无货源跨境电商ERP系统为卖家提供的电子商务解决方案,帮助管理在亚马逊跨境电商平台上的业务操作.欢迎探讨 二.功能框架 多语言切换 出海跨境 无货源 商品上 ...

  8. 亚马逊 外国电商的中国之行

    本文由小编xinqi119986创作 2014年,亚马逊中国开设海外购及全球开店业务,随后它们成为亚马逊在中国的重要业务.但天猫国际.网易考拉.京东全球购等竞争对手也在不断发展,中国电商巨头站稳脚跟后 ...

  9. 亚马逊跨境电商靠谱吗?需要代运营来入手?进来看就知道了!

    亚马逊跨境电商靠谱吗?需要代运营来入手?进来看就知道了! 很多人可能不了解亚马逊跨境电商就想着去怎么怎么干,这样是错误的.我们首先要先了解亚马逊,才能更好的了解并走入亚马逊跨境电商,从而走上致富之路. ...

最新文章

  1. ibatis调用sqlserver存储过程
  2. 全麦吐司和普通吐司的区别_全麦面包和普通面包的区别
  3. /bin/sh^M:损坏的解释器: No such file or directory
  4. 台式电脑改ip地址能不能上外网_如何将电脑当做路由器来用?一招让你不用为路由器发愁...
  5. 10.14 ssh:安全地远程登录主机
  6. java 读取 文本块_Java 13:文本块
  7. 雅加达EE:干净的板岩
  8. c语言将数据写不入文件,求大神看看为什么不能将数据写入文件
  9. python123第一周测试作业指导书_风速仪作业指导书.doc
  10. hdu 3635 Dragon Balls 并查集应用记录每个点的转移次数
  11. 转电感和磁珠两兄弟的差别
  12. java中静态数组和动态数组的定义
  13. Pytorch Bug解决:RuntimeError: running_mean should contain 1 elements not 10
  14. Next.js基本使用
  15. wangEditor粘贴word样式解决方案
  16. counters.dat_使用sys.dm_os_performance_counters对SQL Server问题进行故障排除
  17. 展示数据使用:recyclerview,retrofit,greendao,butterknife,eventbus,fresco。实现效果图列表。MVP模式。
  18. 手把手看如何制作本地yun源
  19. JZOJ5238【GDOI模拟】的士碰撞
  20. 用windbg内核模式调试用户态程序

热门文章

  1. 【附源码】计算机毕业设计JAVA早教课程管理系统
  2. CQUPT Java 随堂测试1
  3. 共享单车的电子围栏——基于RTK技术的高精度定位
  4. 链-反链-Dilworth定理
  5. 【观察】智能运维从拓荒走向深耕,云智慧领跑的升势和胜势
  6. 用nginx 转发22端口
  7. 程序员跳槽一般涨薪多少合适?最高160%倍还有一位网友扎心了
  8. 51单片机的键盘源代码c语言,使用单片机设计实现键盘的资料和源代码概述
  9. python_根据词库进行“词联想”
  10. springboot毕设项目小区停车场管理系统zvzay(java+VUE+Mybatis+Maven+Mysql)