sql同比环比 简单示例

SQL同比-简单示例

同比:一般情况下是今年第n月与去年第n月比

  1. 创建一个简单的登录活动记录表
drop table if EXISTS logintime;
create table logintime (
logincode VARCHAR(10),
usercode VARCHAR(10),
username VARCHAR(10),
logintime TIMESTAMP
);
  1. 插入数据
insert into logintime values('acd001','aqc985654','王俊名','2019-12-12 8:01:12');
insert into logintime values('acd001','aqc985654','王俊名','2019-12-12 10:01:04');
insert into logintime values('acd001','aqc985654','王俊名','2019-12-12 12:05:28');
insert into logintime values('acd001','aqc985654','王俊名','2019-12-12 13:03:36');
insert into logintime values('acd001','aqc985654','王俊名','2019-12-12 15:07:57');
insert into logintime values('acd001','aqc985654','王俊名','2019-12-12 18:01:22');
insert into logintime values('acd001','aqc985654','王俊名','2019-12-12 20:10:42');
insert into logintime values('acd001','aqc985654','王俊名','2018-12-12 10:23:45');
insert into logintime values('acd001','aqc985654','王俊名','2018-12-12 12:11:23');
insert into logintime values('acd001','aqc985654','王俊名','2018-12-12 15:14:33');
insert into logintime values('acd001','aqc985654','王俊名','2018-12-12 20:35:01');
  1. 查询 看一看数据什么样
select * from logintime;

查看同比示例原表数据.

-- 今年双12
select count(0) logincountnow from logintime where date(logintime)= '2019-12-12';
-- 去年双12
select count(0) logincountlastyear from logintime where date(logintime)= '2018-12-12';

同比示例今年双12
同比示例去年双12.
4.同比操作

-- 同比操作
SELECT
	t.username,
	t.logincountnow,
	t2.logincountlastyear,
	( t.logincountnow / t2.logincountlastyear ) - 1 AS rat -- 这个列就是你要的同比增长值
FROM
	-- 主数据
	( SELECT t.username, count( 0 ) logincountnow FROM logintime t WHERE date(logintime)= '2019-12-12' GROUP BY t.username ) t
	LEFT JOIN 
	-- 对比数据
	( SELECT t.username, count( 0 ) logincountlastyear FROM logintime t WHERE date(logintime)= '2018-12-12' GROUP BY t.username ) t2 
	ON t.username = t2.username;

同比示例结果图

简单来讲就是拿出数据表的同时间长度内相对位置点的一致的数据进行对比。这个相对的点时间单位可以是时分秒,也可以是日月年。
同比时间轴示例.

SQL环比-简单示例

环比:表示连续2个统计周期(比如连续两月)内的量的变化比。

简单讲:就是两个连续的时间长度内数据量的变化
还是在之前的表里加入一些数据

insert into logintime values('acd001','aqc985654','王俊名','2019-07-07 18:01:22');
insert into logintime values('acd001','aqc985654','王俊名','2019-07-08 20:10:42');
insert into logintime values('acd001','aqc985654','王俊名','2018-01-01 10:23:45');
insert into logintime values('acd001','aqc985654','王俊名','2018-03-18 12:11:23');
insert into logintime values('acd001','aqc985654','王俊名','2018-07-07 15:14:33');
insert into logintime values('acd001','aqc985654','王俊名','2018-11-11 20:35:01');

执行一下代码查看一下

select count(0) logincountnow from logintime where year(logintime) = '2019';
select count(0) logincountlastyear from logintime where year(logintime) = '2018';

环比结果1
如上图这个“王俊名”同志 今年登录9次
环比结果2

如上图这个“王俊名”同志 去年登录8次

-- 环比操作
SELECT
	t.username,
	t.logincountnow,
	t2.logincountlastyear,
	( t.logincountnow / t2.logincountlastyear ) - 1 AS rat -- 这个列就是你要的环比增长值
FROM
	-- 主数据
	( SELECT t.username, count( 0 ) logincountnow FROM logintime t WHERE year(logintime)= '2019' GROUP BY t.username ) t
	LEFT JOIN 
	-- 对比数据
	( SELECT t.username, count( 0 ) logincountlastyear FROM logintime t WHERE year(logintime)= '2018' GROUP BY t.username ) t2 
	ON t.username = t2.username;

环比结果.
环比概念示例图:
环比示例图.
同比、环比这两张图是不是很像有点相似?对比一下哪里不一样,哈哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章