Maison >base de données >tutoriel mysql >Comment calculer d'année en année et de mois en mois dans MySQL

Comment calculer d'année en année et de mois en mois dans MySQL

WBOY
WBOYavant
2023-05-29 09:55:114676parcourir

Jetons d'abord un coup d'œil à ce qui est d'une année sur l'autre et d'un mois sur l'autre :

Année sur l'année : fait généralement référence à la comparaison entre le nième mois de cette année et le nième mois de l'année dernière. Le taux de développement d'une année sur l'autre vise principalement à éliminer l'impact des changements saisonniers et à illustrer le taux de développement relatif obtenu en comparant le niveau de développement de cette période avec le niveau de développement de la même période l'année dernière.

Le monochrome est généralement utilisé pour exprimer la proportion de changement de quantité sur deux périodes consécutives (comme deux mois consécutifs). Il existe deux types de ratio de chaîne : le taux de croissance de la chaîne et la vitesse de développement de la chaîne.

Comment calculer le taux de croissance d'une année sur l'autre et le taux de croissance d'un mois à l'autre :

Taux de croissance d'une année sur l'autre :

Taux de croissance d'une année sur l'autre = (nombre de cette période & moins; nombre de la même période) / nombre de la même période ∗ 100 %

taux de croissance mensuel :

Taux de croissance monochrone = (numéro de la période en cours & moins ; nombre de la période précédente) / nombre de la période précédente × ;

La différence entre l'année sur l'année et le mois sur le mois

  • L'année sur l'année est la comparaison entre la période actuelle et la même période, et le mois sur mois est la comparaison entre la période actuelle période et la période précédente.

  • Le monochrome est généralement utilisé en mois et en jours et rarement en années. Il est principalement utilisé pour comparer le degré d'augmentation sur une courte période de temps. Cependant, en raison des différences sectorielles, telles que le tourisme, il sera affecté par. basses et hautes saisons.

  • Une année sur l'autre est généralement utilisée sur deux années adjacentes, au cours de la même période, pour vérifier le degré d'augmentation. Elle est généralement utilisée le même mois sur deux ans et est rarement utilisée à la même date. dans deux mois.

Comment calculer d'année en année et de mois en mois dans MySQL

Préparation des données

Créez une table de produits et ajoutez des données à la table de produits

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);

Comment calculer dannée en année et de mois en mois dans MySQL

Créez une table de détails de commande et ajoutez données dans le tableau des détails de la commande

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');

Comment calculer dannée en année et de mois en mois dans MySQL

Calculer d'une année sur l'autre et de mois en mois

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

analyse SQL

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

Résultat :

Comment calculer dannée en année et de mois en mois dans MySQL

De plus, si vous souhaitez également calculer les ventes cumulées , tu peux écrire comme ceci :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer