娛樂城 推薦

ᛃ吃角子老虎由來同比以及環比什麼意思(怎麼簡略完成同比、環比計算的N種姿式?)

在做數據闡發時,咱們會常常聽到同比、環比的觀點。各個企業以及構造在發布統計數據時,平日喜歡用同比、環比來以及之前的汗青數據進行比較,用來申明數據的轉變環境。例如,統計局公布2022年1月份CPI同比增加0.9%,環比增加0.6%。現實在基于數據庫的數據闡發場景中,環比以及同比是典型的復雜計算場景之壹,分外世界 盃 資格 賽 歐洲是在Oracle等貿易數據庫的闡發函數浮現之前。以MySQL為例,在8.0版本中才引入了Lag以及Lead函數,這兩個函數結合開窗函數有用提高了同比、環比等復雜運算的完成效率。在5.x系列版本中,MySQL必要依靠多次嵌套子查問以及自聯繫關係才能完成此類計算。咱們以壹個簡略的例子,來分手望下,MySql 5.x以及8.0是詳細完成同比、環比計算的。示例數據見表:CREATE TABLE sales (
`產物ID` varchar(20),
`販賣數目` int(20) ,
`販賣時間` timestamp(6) NULL DEFAULT NULL
)
INSERT INTO s世界盃資格賽亞洲ales VALUES (‘C1001’, 15, ‘2020-06-01 10:10:12’);
INSERT INTO sales VALUES (‘C1002’,26, ‘2020-05-02 0:10:12’);
INSERT INTO sales VALUES (‘C1003’, 21, ‘2020-04-03 0:10:12’);
INSERT INTO sales VALUES (‘世界盃結果C1003′, 23, ‘2020-04-04 0:10:12’);
INSERT INTO sales VALUES (‘C1003’, 0, ‘2020-03-05 0:10:12’);
INSERT INTO sales VALUES (‘C1001’, SWAG娛樂城16, ‘2020-02-06 3:0:12’);
INSERT INTO sales VALUES (‘C1002’, 32, ‘2020-01-07 0:10:12’);
INSERT INTO sales VALUES (‘C1001’, 16, ‘2019-12-08 0:12:24’);
INSERT INTO sales VALUES (‘C1001’, 32, ‘2019-06-09 0:12:24’);
INSERT INTO sales VALUES (‘C1002’, 17, ‘2019-05-09 0:12:24′);一、MySQL 5.x:經由過程子查問以及聯繫關係完成同比以及占比計算以按年代統計不同年份的販賣總值,并計算環比(販賣總額同比上期)、同比(販賣總額同比客歲同期)為例。示例表佈局以及數據經由過程SQL計算環比以及同比:select year(c.販賣時間) yy,month(c.販賣時間) mm,
concat(ifnull(abs(round((sum(c.販賣數目)-ss1)/ss1*100,2)),0),’%’) 同比,
concat(ifnull(abs(round((sum(c.販賣數目)-ss2)/ss2*100,2)),0),’%’) 環比
from sales c
left join (select month(a.販賣時間) mm1,
year(a.販賣時間) yy1,
sum(a.販賣數目) ss1
from sales a
GROUP BY mm1,yy1) a
on month(c.販賣時間) = a.mm1
and a.yy1 = year(c.販賣時間)-1
left join (select month(a.販賣時間) mm2,
year(a.販賣時間) yy2,
sum(a.販賣數目) ss2
from sales a

GROUP BY mm2,yy2) b
on (b.yy2 = year(c.販賣時間) and b.mm2 1 = month(c.販賣時間) OR (yy2=year(c.販賣時間)-1
AND b.mm2 = 12 AND month(c.販賣時間) = 1))
group by yy, mm
order by yy,mm asc計算效果:2、MySQL 8.0:經由過程闡發函數完成同比以及占比計算MySql8.0支撐了Lead以及Lag闡發函數,固然可以大幅提高同、環比計算的效率,但依然必要編寫SQL語句處置。2.1計算同比:select t2.年份,t2.月份,concat(round((t2.數目-t1.數目)/t1.數目,2)*100,’%’) as 同比 from (
SELECT year(販賣時間) as 年份,month(販賣時間) as 月份,sum(販賣數目) as 數目 from sales
group by year(販賣時間),month(販賣時間) order by year(販賣時間) desc, month(販賣時間) desc
) t1
,(
SELECT year(販賣時間) as 年份,month(販賣時間) as 月份,sum(販賣數目) as 數目 from sales
group by year(販賣時間),month(販賣時間) order by year(販賣時間) desc, month(販賣時間) desc
) t2 where t1.年份=t2.年份-1 and t1.月份=t2.月份2.2計算環比:SELECT
mm,
CONCAT(
ROUND(
IFNULL(
(xl – first_xl) / first_xl * 100,
2
),
0
),
‘%’
) AS 環比
FROM
(
SELECT
mm,
xl,
lead (xl, 1) over (ORDER BY mm DESC) AS first_xl
FROM
(
SELECT
DATE_FORMAT(販賣時間, ‘%Y-%m’) AS mm,
sum(販賣數目) AS xl
FROM
sales
GROUP BY
DATE_FORMAT(販賣時間, ‘%Y-%m’)
) t
) a在SqlServer2008R2以及Oracle10g之后,都供應了Lag以及Lead闡發函數。詳細的計算邏輯以及用法與上述MySQL8.0相似。三、使用BI對象的計算引擎針對此類復雜的計算場景,貿易智能BI數據闡發對象供應了加倍高效的辦理方案。以Wyn Enterprise嵌入式貿易智能軟件為例,其內置的wax闡發抒發式以及疾速計算引擎,供應間接完成同比、環比等復雜計算的本領,而再也不必要寫復雜冗雜的SQL。3.1 使用內置的同比、環比疾速計算功效同比、環比等計算通常為BI對象的規範功效,咱們可以間接經由過程配置完成。3.2 使用數據闡發抒發式若是內置疾速計算沒法知足要求,還可以經由過程闡發抒發式完成更復雜的計算。闡發抒發式是壹種加倍天捕魚機遊戲真、強盛的數據計算方式,經由過程豐厚的函數,用戶可以像Excel公式同樣自由組合,完成加倍強盛的闡發本領。闡發抒發式基于數據模子進行營業計算,以壹些界說好的函數應用精確的語法來實現某個復雜的營業邏輯計算。如許可以使用戶更天真地使用數據,最大限度的行使數據。經由過程比擬SQL以及BI數據闡發對象在處置同比、環比等復雜計算中的懸殊,咱們可以發明,仍是業餘的對象在數據計算以及處置本領上要加倍便捷。以后在事情中,若是有相似的闡發計算需求,選擇BI闡發對象來處置是再合適無非的了。