当前位置:首页 > MySQL

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

canca3年前 (2023-08-14)MySQL569

简化的表结构:

CREATE TABLE order (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `order_no` varchar(32) NOT 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 statistics, count(*) 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 ,问题主要出在临时表,一旦数据量起来就不太行,但是暂时没接数仓就先这样顶着了,就前期用用。


扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/861.html

标签: SQL统计
分享给朋友:

“一条SQL 统计近 7天、30天、全部的订单量” 的相关文章

MySql导入SQL文件

MySql导入SQL文件: mysql -u root -p <c:\sampledb.sql…

MySQL建立远程登陆用户

如果你想连接你的mysql的时候发生这个错误: ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server 解决方法: 1. 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要…

MySQL免安装配置方法

1.下载一个安装版的。 安装版,安装后%MYSQL_HOME%\bin下有一个mysqld-nt.exe文件。将它复制出来(珍藏起来)。 2.下载一个免安装版MSYQL 将它解压。例如:E:/mysql-6.0.3-alpha-win32 将my-huge.ini另存为my.ini。 打开my.in…

MySQL备份与恢复语句

mysql备份语句:E:\MySQL Server 5.0\bin>mysqldump -uroot -padmin --default-character-set=utf8 --opt --extended-insert=false --triggers -R --hex-blob -x s…

Mysql导入大容量SQL文件数据问题

Mysql导入大容量SQL文件数据问题

mysql在通过导入sql文件可能会出现下面二个问题: 1.如果sql文件过大,会出现"MySQL server has gone away"问题; 2.如果sql文件数据有中文,会出现乱码  www.2cto.com   解决问题: 问题…

MySQL表索引损坏致Crash及修复过程实例

监控到一台MySQL实例在早上发生过Crash,上去看了一下,已经被mysqld_safe成功拉起。上去检查一下错误日志,发现错误日志如下(已对表名,库名,路径做脱敏处理):…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。