Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk mengira tahun ke tahun dan bulan ke bulan dalam MySQL

Bagaimana untuk mengira tahun ke tahun dan bulan ke bulan dalam MySQL

WBOY
WBOYke hadapan
2023-05-29 09:55:114590semak imbas

Mari kita lihat dahulu apa itu tahun ke tahun dan bulan ke bulan:

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.

Cara mengira kadar pertumbuhan tahun ke tahun dan kadar pertumbuhan bulan ke bulan:

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

YoY ialah perbandingan antara tempoh semasa dan tempoh yang sama, dan perbandingan bulan ke tahun ialah perbandingan antara tempoh semasa dan tempoh sebelumnya.

  • 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

  • Penyediaan data

Buat jadual produk dan tambah data ke jadual produk

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');
Bagaimana untuk mengira tahun ke tahun dan bulan ke bulan dalam MySQL

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 asc
Bagaimana untuk mengira tahun ke tahun dan bulan ke bulan dalam MySQLsql 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

:

Di samping itu, jika anda ingin mengira kumulatif jualan, anda boleh menulis:

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam