Somme inexacte mysql

Résolu
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention   -  
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

La somme que j'effectue php/mysql n'est pas correct.

Voici la requete

SELECT MONTH(DATE), SUM(T_MINI), SUM(T_MAXI), SUM(LLUVIA) FROM `releve-2` WHERE DATE >'2020-11-30' AND DATE < '2020-12-10' GROUP BY MONTH(DATE);


Ma table
ID DATE T_MINI T_MAXI LLUVIA
3621 2020-12-01 3,1 12,6
3622 2020-12-02 6,3 9,9
3623 2020-12-03 2,5 9,6
3624 2020-12-04 1,4 4 36
3625 2020-12-05 1,5 4,5 8
3626 2020-12-06 2,7 8,4 7
3627 2020-12-07 4,5 7,9 17
3628 2020-12-08 4 7,9 5
3629 2020-12-09 2,5 11 8

Résultat MYSQL ==>
MONTH(DATE) SUM(T_MINI) SUM(T_MAXI) SUM(LLUVIA)
12 25 71 81

RESULTAT CORRECT
MONTH(DATE) SUM(T_MINI) SUM(T_MAXI) SUM(LLUVIA)
12 28.5 75.8 81


et plus je selectionne de ligne plus l'erreur est grande.


POUVEZ-VOUS ME DIRE OU JE ME TROMPE OU CE QUE JE FAIS MAL?

MERCI POUR VOTRE AIDE


Configuration: Windows / Chrome 101.0.4951.54
A voir également:

6 réponses

jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Bonjour,

Le calcul est la somme de la partie entière des nombres. Par défaut j'imagine que dans le SGBD le séparateur décimal est un point, pas une virgule. D'ailleurs dans la somme correcte vous mettez un point. T_mini et t_maxi sont-ils bien des nombres, pas une chaine ?

0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
VOICI LA STRUCTURE DE MA TABLE

1 ID int(11) No Ninguna
2 DATE date No Ninguna
3 T_MINI varchar(20) utf8_general_ci Sí NULL
4 T_MAXI varchar(20) utf8_general_ci Sí NULL
5 LLUVIA varchar(10) utf8_general_ci Sí NULL
6 NIEVE text utf8_general_ci Sí NULL

J AVAIS COMMENCER AVEC CETTE STRUCTURE
     1 	ID 	int(11) 			No 	Ninguna 			

	2 	DATE 	date 			No 	Ninguna 			

	3 	T_MINI 	decimal(20,0) 			No 	Ninguna 		

	4 	T_MAXI 	decimal(20,0) 			No 	Ninguna 			

	5 	LLUVIA 	decimal(20,0) 			No 	Ninguna 		

	6 	NIEVE 	text 	utf8_general_ci 		No 	Ninguna


MAIS J'AVAIS CETTE ERREUR
INSERT INTO `releve-3` VALUES ('3591', '2020-11-01', '15,1', '17,8', '', 'FALSO');

#1366 - Incorrect decimal value: '15,1' for column 'T_MINI' at row 1
0
jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
une somme sur du varchar c'est une mauvaise idée

il faut que dans ton insert tu remplaces les nombres à virgule par le point
et que dans la définition de la table tu mettes decimal(20,1) s'il n'y a toujours qu'une décimale. A noter que dans cette syntaxe, la virgule est un séparateur de paramètres, (longueur, nombre decimales), pas LE séparateur décimal.
0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
Super merci pour ton aide.

Une question sur cette requete

'SELECT YEAR(DATE), MONTH(DATE), DAY(DATE) AVG(T_MINI), AVG(T_MAXI), SUM(LLUVIA) FROM releve  WHERE MONTH(DATE) > 2, DAY(DATE >19 AND MONTH(DATE) <7, DAY(DATE) <21 GROUP BY YEAR(DATE);


Je vex obtenir données pour le printemps, l'été, l'automne et l'hivers de chaque année.
J'ai renseigné la date ainsi "MONTH(DATE) > 2, DAY(DATE >19 AND MONTH(DATE) <7, DAY(DATE) <21" mais cela ne focntionne pas.

Comment dois-je ecrire cette partie de la requête?

D'avance merci
0
jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Je ne comprends vraiment pas vers quoi tu t'orientes avec ta requete ;-)

Il existe plusieurs difficultés à la notion de saison, l'hiver est à cheval sur 2 années, et le jour exact du début d'une saison peut varier.

Tu devrais plutôt traiter les trimestres, beaucoup plus facile, avec quarter(date)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour cette réponse.

Je rencontre un autre probleme avec les cellules vides.

Je créé mon fichier CSV a partir d'une table excel.

Avec ce CSV, SQL ne me permet pas importer les données a cause des champs vides:
1;2011-01-02;-1.2;8.5;;FALSO;2011-01-12
2;2011-01-03;;;21;FALSO;2011-01-13

J'ai donc remplacer les champs vides par une valeur (-1000) et mon CSV deveint
1;2011-01-02;-1000;-1000;-1000;FALSO;2011-01-12
2;2011-01-03;-1000;-1000;21;FALSO;2011-01-13

La structure de ma table
1 ID int(11) No Ninguna
2 DATE date No Ninguna
3 T_MINI decimal(20,2) Sí NULL
4 T_MAXI decimal(20,1) Sí NULL
5 LLUVIA decimal(20,0) Sí NULL
6 NIEVE text utf8_general_ci Sí NULL
7 SAISON date No Ninguna

Ma requete pour remplacer la valeur -1000 CSV -1000.00 SQL par null est:
UPDATE releve SET T_MINI= replace(T_MINI, '-1000.00', 'null');


J'ai cette erreur
UPDATE releve SET T_MINI= replace(T_MINI, '-1000.00', 'null');

MySQL ha dicho: Documentación
#1366 - Incorrect decimal value: 'null' for column 'T_MINI' at row 1

En remplacant null par ""
UPDATE releve SET T_MINI= replace(T_MINI, '-1000.00', '');

MySQL ha dicho: Documentación
#1366 - Incorrect decimal value: '' for column 'T_MINI' at row 1

Pourrais-tu me dire ou est le probleme? Par avance merci
0
jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
UPDATE releve SET T_MINI = NULL WHERE T_MINI = -1000.00 


peut être aussi

UPDATE releve SET T_MINI= replace(T_MINI, -1000.00, NULL); 


et je ne sais pas comment tu effectues l'insert depuis le .csv, dans la table, mais il doit être possible de resoudre le problème à l'origine
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jee pee Messages postés 41526 Date d'inscription   Statut Modérateur Dernière intervention  
 
Bonjour
Il faut autoriser la valeur NULL dans le paramétrage du champ dans la table...
Sinon ça ne fonctionnera pas les seuls des valeurs numériques seront autorisées.
0
mont_dani Messages postés 232 Date d'inscription   Statut Membre Dernière intervention  
 
UPDATE releve SET T_MINI = NULL WHERE T_MINI = -1000.00 est la bonne forme.

Merci a tous.
0