Rumah > Artikel > pangkalan data > Bagaimana untuk mengira tahun ke tahun dan bulan ke bulan dalam MySQL
Tahun ke tahun: biasanya merujuk kepada perbandingan antara bulan ke-n tahun ini dan ke- bulan tahun lepas. Kadar pembangunan tahun ke tahun adalah terutamanya untuk menghapuskan kesan perubahan bermusim dan untuk menggambarkan kadar pembangunan relatif yang dicapai dengan membandingkan tahap pembangunan tempoh ini dengan tahap pembangunan tempoh yang sama tahun lepas.
Monokrom biasanya digunakan untuk menyatakan perkadaran perubahan kuantiti dalam dua tempoh masa berturut-turut (seperti dua bulan berturut-turut). Terdapat dua jenis nisbah rantai: kadar pertumbuhan rantai dan kelajuan pembangunan rantai.
Kadar pertumbuhan tahun ke tahun:
Tahun-ke- kadar pertumbuhan tahun = (bilangan untuk tempoh semasa&tolak; nombor untuk tempoh yang sama) / tempoh yang sama Nombor&rendah; (Bilangan tempoh ini&tolak; Bilangan tempoh sebelumnya) / Bilangan tempoh sebelumnya 100 %
YoY dan MoM Perbezaan
Nisbah rantaian-ke-bulan biasanya digunakan dalam bulan dan hari dan jarang dalam tahun Ia digunakan terutamanya untuk membandingkan tahap peningkatan dalam tempoh masa yang singkat. disebabkan oleh perbezaan industri, seperti pelancongan, ia akan terjejas oleh musim luar puncak dan musim puncak .
Tahun-ke-tahun biasanya digunakan dalam dua tahun bersebelahan, dalam tempoh masa yang sama, untuk menyemak tahap peningkatan Ia biasanya digunakan pada bulan yang sama dalam dua tahun, dan jarang digunakan pada tarikh yang sama dalam tempoh dua bulan.
Cara mengira tahun ke tahun dan bulan ke bulan dalam MySQL
CREATE TABLE product ( `产品ID` varchar(20) NOT NULL, `产品名称` varchar(20) , `产品单价` int (10) ) INSERT INTO product VALUES ('C1001','产品A',45); INSERT INTO product VALUES ('C1002','产品B',52); INSERT INTO product VALUES ('C1003','产品C',39);Buat butiran pesanan dan tambah data pada butiran pesanan
CREATE TABLE sales ( `订单ID` int NOT NULL PRIMARY KEY AUTO_INCREMENT, `产品ID` varchar(25) NOT NULL , `销售数量` int(20) , `销售时间` timestamp(6) NULL DEFAULT NULL ); INSERT INTO sales(`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 15, '2020-06-01 10:10:12'); INSERT INTO sales(`产品ID`,`销售数量`,`销售时间`) VALUES ('C1002',26, '2020-05-02 0:10:12'); INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 21, '2020-04-03 0:10:12'); INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 23, '2020-04-04 0:10:12'); INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1003', 0, '2020-03-05 0:10:12'); INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 16, '2020-02-06 3:0:12'); INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1002', 32, '2020-01-07 0:10:12'); INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 16, '2019-12-08 0:12:24'); INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1001', 32, '2019-06-09 0:12:24'); INSERT INTO sales (`产品ID`,`销售数量`,`销售时间`) VALUES ('C1002', 17, '2019-05-09 0:12:24');Kira tahun ke- tahun dan bulan ke bulan
select year(c.销售时间) yy,month(c.销售时间) mm, sum(c.销售数量*d.产品单价) ss, concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss1)/ss1*100,2)),0),'%') 同比, concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss2)/ss2*100,2)),0),'%') 环比 from sales c left join product d on c.产品ID=d.产品ID left join (select month(a.销售时间) mm1, year(a.销售时间) yy1, sum(a.销售数量*d.产品单价) ss1 from sales a left join product d on a.产品ID=d.产品ID 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.销售数量*d.产品单价) ss2 from sales a left join product d on a.产品ID=d.产品ID 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 ascsql Analisis hasil
select year(c.销售时间) yy,month(c.销售时间) mm, sum(c.销售数量*d.产品单价) ss, # concat函数,mysql字符串拼接,因为同比和环比都是百分数 # ifnull函数,mysql判断字段是否为空,为空则为0 # abs函数,mysql取绝对值,因为我这里取的都是正数 # round函数,mysql保留几位小数 concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss1)/ss1*100,2)),0),'%') 同比, concat(ifnull(abs(round((sum(c.销售数量*d.产品单价)-ss2)/ss2*100,2)),0),'%') 环比 from sales c left join product d on c.产品ID=d.产品ID # 上一年销售额 left join (select month(a.销售时间) mm1, year(a.销售时间) yy1, sum(a.销售数量*d.产品单价) ss1 from sales a left join product d on a.产品ID=d.产品ID GROUP BY mm1,yy1) a # 同比月份相同,年份减1 on month(c.销售时间) = a.mm1 and a.yy1 = year(c.销售时间)-1 # 今年销售额 left join (select month(a.销售时间) mm2, year(a.销售时间) yy2, sum(a.销售数量*d.产品单价) ss2 from sales a left join product d on a.产品ID=d.产品ID 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
select year(销售时间) yy,month(销售时间) mm, sum(销售数量*b.产品单价) over(order by year(销售时间) ,month(销售时间) ) 累计数量 from sales a left join product b on a.产品ID=b.产品ID order by yy,mm
Atas ialah kandungan terperinci Bagaimana untuk mengira tahun ke tahun dan bulan ke bulan dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!