SQL同比-簡單示例
同比:一般情況下是今年第n月與去年第n月比
- 創建一個簡單的登錄活動記錄表
drop table if EXISTS logintime;
create table logintime (
logincode VARCHAR(10),
usercode VARCHAR(10),
username VARCHAR(10),
logintime TIMESTAMP
);
- 插入數據
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');
- 查詢 看一看數據什麼樣
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';
.
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';
如上圖這個“王俊名”同志 今年登錄9次
如上圖這個“王俊名”同志 去年登錄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;
.
環比概念示例圖:
.
同比、環比這兩張圖是不是很像有點相似?對比一下哪裏不一樣,哈哈