当前位置: 首页 > news >正文

以梧桐数据库为例分析分组排序并取每组第二大数值对应的用户的SQL实现

一、背景说明

在运营商业务中,经常有各种各样的业务分类统计,出各类型任务的业务报表数据,比如,“统计下9月份各地市在各网格上任我选产品订购数量的分组排序状况”。

二、问题描述

现在有一个业务场景,要求计算8月份各地市在各网格上任我选产品订购数量的分组排序状况,并输出排第二位的各地市网格名称。 本次以梧桐数据库为例进行SQL实现及思路讲解。

三、表结构说明

梧桐数据库产品订购记录表建表语句

create table order_record (user_id int,city_code varchar(32),wg_code varchar(32),order_date date,product varchar(32),primary key (user_id)
);

四、表数据插入

通过insert语句向梧桐数据库插入样例数据

insert into order_record values(1, '1134', '113403', '2024-09-01','1134023');
insert into order_record values(2, '2102', '210205', '2024-09-01','1134033');
insert into order_record values(3, '1134', '113403', '2024-09-01','1134043');
insert into order_record values(4, '1135', '113504', '2024-09-01','1134023');
insert into order_record values(5, '1130', '113001', '2024-09-01','1134023');
insert into order_record values(6, '2314', '231402', '2024-01-01','1134043');
insert into order_record values(7, '2208', '220801', '2024-09-02','1134043');
insert into order_record values(8, '2102', '210202', '2023-01-02','1134023');
insert into order_record values(9, '2102', '210203', '2023-01-02','1134043');
insert into order_record values(10, '1130', '113001', '2023-01-02','1134043');
insert into order_record values(11, '1130', '113001', '2024-01-02','1134033');
insert into order_record values(12, '1135', '113504', '2023-01-02','1134023');
insert into order_record values(13, '2208', '220802', '2023-01-03','1134023');

五、sql代码解释

SELECT subq.group_id, subq.second_max_value_user_id
FROM (SELECT a.city_code, a.wg_code,a.valueLAG(value, 1, 0) OVER (PARTITION BY city_code,wg_code ORDER BY value DESC) AS second_max_value,FIRST_VALUE(wg_code) OVER (PARTITION BY city_code,wg_code ORDER BY value DESC) AS second_max_value_user_idFROM 
(select city_code,wg_code,count(distinct user_id) as value from order_record where order_date >='20240901' and order_date <='20240930' and product='1134043' group by city_code,wg_code
)a
) subq
WHERE subq.value = subq.second_max_value;

六、解释sql每个部分的功能

SELECT 子句:

 a.city_code, a.wg_code,a.valueLAG(value, 1, 0) OVER (PARTITION BY city_code,wg_code ORDER BY value DESC) AS second_max_value,FIRST_VALUE(wg_code) OVER (PARTITION BY city_code,wg_code ORDER BY value DESC) AS second_max_value_user_id 

FROM 子句:

select city_code,wg_code,count(distinct user_id) as value from order_record where order_date >='20240901' and order_date <='20240930' and product='1134043' group by city_code,wg_code

PARTITION BY 子句:

city_code,wg_code: 按照城市编码以及网格编码分组。

ORDER BY 子句:

city_code,wg_code: 按照城市编码以及网格编码排序。


http://www.mrgr.cn/news/67559.html

相关文章:

  • RTC精度及校准
  • java项目之微服务在线教育系统设计与实现(springcloud)
  • ubuntu 22.04 如何调整进程启动后能打开的文件数限制
  • MSC“名实之辩”:精准鉴定只为精准治疗
  • 设计模式小结一工厂模式
  • 英语作文【自写记录】
  • C#的IDisposable 接口和析构函数
  • JS保留两位小数
  • 我们来学mysql -- EXPLAIN之ID(原理篇)
  • idea-git 远程仓库代码回滚,本地仓库代码回滚,删除未加入git的文件
  • 二叉树及其应用
  • 背包九讲——背包问题求具体方案
  • 三品PLM系统如何规范企业图纸文档资料电子化管理
  • 全国消防安全月知识答题小程序来袭
  • 基于SpringBoot的Java教学支持系统开发指南
  • 将python代码转化成接口api
  • 低价治理都有哪些方法
  • 营销邮件策略:提升打开率和转化率的技巧!
  • 【数据结构和算法】-时间复杂度
  • mysql 源码安装以及多实例
  • 学习threejs,使用JSON格式保存和加载模型
  • MELON的难题
  • 数据库 - 一文看懂MongoDB
  • encodeURIComponent和decodeURIComponent的使用场景
  • Misère Nim game
  • 支持高性能结构化数据提取的 Embedding 模型——NuExtract-v1.5