首页 > 实战 SQL:亚马逊、京东等电商平台的销售排行榜和飙升榜

亚马逊和京东支付方式,实战 SQL:亚马逊、京东等电商平台的销售排行榜和飙升榜

互联网 2021-04-10 23:01:23

数据分析

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

大家好,我是只谈技术不剪发的 Tony 老师。不知道你有没有注意过,在亚马逊或者京东等电商平台的网站上都提供了准实时的产品分类销售排行榜。例如,以下就是亚马逊上销售排行榜和销售飙升榜的一个截图: 亚马逊 今天我们就来讨论一下如何使用 SQL 排名窗口函数和取值窗口函数实现这类功能。关于窗口函数的介绍和聚合窗口函数的应用案例可以参考实战 SQL:银行等金融机构可疑支付交易的监测。

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

窗口函数描述MySQLOracleSQL ServerPostgreSQLSQLiteROW_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 saleswith 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
免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读