Redian新闻
>
SQL骚操作,一条SQL 统计近 7天、30天、全部的订单量

SQL骚操作,一条SQL 统计近 7天、30天、全部的订单量

科技

你好,我是yes。

最近在搞新项目,一直在迭代,这期接到个新需求,统计商户近 1天、7天、30天、全部的订单量。

一般而言这种统计类需求都不会直接查库,而是交由数仓同学统计,然后回写到业务表或者业务同学直接读数仓表。

但是由于这是新项目,还没接数仓,并且量还没起来,所以这期就将就着先直接查库实现。

那么问题来了,这 SQL 咋写呢?

直接看简化的表结构:

CREATE TABLE order (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `order_no` varchar(32NOT NULL COMMENT '订单号',
  `user_id` bigint NOT NULL COMMENT '用户id',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`USING BTREE,
  KEY `idx_userid_createtime` (`user_id`,`create_time`USING BTREE
)

今天是 2023-09-12 ,如果我们要统计近 1 天的订单量,那么 SQL 很简单:

SELECT count(*) FROM order where user_id = 'xx' and time_create >'2023-09-12 00:00:00'

同理 7天、30天

SELECT count(*) FROM order where user_id = 'xx' and time_create >'2023-09-06 00:00:00'

SELECT count(*) FROM order where user_id = 'xx' and time_create >'2023-08-14 00:00:00'

还有全部

SELECT count(*) FROM order where user_id = 'xx'

但是这样一来需要查四次数据库!能不能整个花活,把它压缩成一条 SQL 一次性查询呢?

动脑瓜子刮了刮,还真行!看下面这条 SQL:

SELECT statisticscount(*) from (
SELECT CASE 
 WHEN time_create > '2023-09-12 00:00:00' THEN '1'
 WHEN time_create > '2023-09-06 00:00:00' THEN '7'
 WHEN time_create > '2023-08-14 00:00:00' THEN '30'
 ELSE
  'all'
END as statistics
from `order` where user_id = 'xxx'
) temp GROUP BY statistics;

执行结果如下:

思路就是利用 case when 先给对应时间数据打个标记,存放在临时表,然后通过 group by 统计。

我用了一个 4w 多订单数据的用户测试了一下,执行时间是 0.5s ,问题主要出在临时表,一旦数据量起来就不太行,但是暂时没接数仓就先这样顶着了,就前期用用。

突然回想起前公司那时候没招数据同学,让我去整 BI, 那 SQL 写的天花乱坠,感觉把一辈子的 SQL 都写完了,SQL Boy 也不容易啊。

后面我整整把一些骚操作分享一下。

我是yes,从一点点到亿点点,我们下篇见!


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Guava 骚操作,10分钟搞定日志脱敏需求!行业观察 | ​阿里本地生活亏损收窄,饿了么订单量持续增长Guava中这些Map的骚操作,让我的代码量减少了50%忽冷忽热的天气,一件工装衬衫就是男人全部的荷尔蒙中百万大奖就能躺平?美国大姐一个骚操作兜里就剩300。妹纸帮闺蜜现场追帅哥,一波骚操作后他竟朝她们走来,后续亮了成功未必是市场部的功劳,失败却一定是市场部的责任解决慢病痛点,这家公司已获3轮总计近亿元投资最近一段时间我惨遭歧视!旧文明的社会组织(第三章摘要)《一念如初》&《牵手爱》跑步者眼中的夕阳 (The Sunset in A Runner’s Eyes)不给外卖员小费?DoorDash警告:你的订单可能很久才送到又是一条慢SQL改写,拿捏!重磅 |《开源数据库生态发展研究报告》发布 GreatSQL为MySQL5.7最佳替代方案!可怕!美国3人喝奶昔后身亡,只因快餐店店员这一骚操作A股炸裂神操作,7天35%,我有话要说同事写了一条 SQL,把 MyBatis 都干翻了。。Pride 里的男性自卑和自尊三代烟草人,原来是违规骚操作!华裔少女被外国男友勒死, 凶手与腐尸同住2个月! 警察骚操作竟是罪魁祸首?晚点独家|抖音电商 1-10 月 GMV 接近 2 万亿元;订单量成为今年双 11 淘宝天猫的新考核指标开发商骚操作致房子烂尾,女子停交房贷惨上银行黑名单远超2019年同期!预计近五年最火DoltgreSQL发布,基于Git的PostgreSQL马斯克 “零元购”,骚操作强夺 @x 推特账号你根本不知道,直男七夕送礼的骚操作,那简直是雷区蹦迪MyBatis 动态 SQL 最全教程,这样写 SQL 太爽了!中百万大奖就能躺平?佛州大姐一个骚操作兜里就剩$300京东11.11晚8点现货开卖 10分钟下单用户数及成交订单量同比增长均超4倍承泰科技Q3再获30多个智驾项目,新增订单0.86亿!累计近11亿!MySQL 巨坑:永远不要在 MySQL 中使用 UTF-8!!突发!美国的这类签证面谈被大面积取消!预计近20000人受影响...印度不再从中国进口手机,每年1.8亿支的订单没了退税不成反欠$10000,官网排队苦等数小时!ATO成“退税刺客”,频出骚操作,纳税人:想死!这些人群更成“眼中钉”......
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。