Erreur Requête Average
Résolu/Fermé
Esfriert
Messages postés
5
Date d'inscription
samedi 23 décembre 2017
Statut
Membre
Dernière intervention
23 décembre 2017
-
23 déc. 2017 à 17:25
Utilisateur anonyme - 23 déc. 2017 à 23:38
Utilisateur anonyme - 23 déc. 2017 à 23:38
A voir également:
- Erreur Requête Average
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-32 ✓ - Forum Bbox Bouygues
4 réponses
jordane45
Messages postés
38429
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 février 2025
4 735
23 déc. 2017 à 20:37
23 déc. 2017 à 20:37
Bonjour
Avec AVG tu dois mettre un group by Fk_titre
Avec AVG tu dois mettre un group by Fk_titre
Esfriert
Messages postés
5
Date d'inscription
samedi 23 décembre 2017
Statut
Membre
Dernière intervention
23 décembre 2017
23 déc. 2017 à 22:13
23 déc. 2017 à 22:13
![](https://img-19.ccm2.net/lTVP7sEo1Oveov2XbhOmKJOfR_4=/18564e7f6cd7462fb9b4f75a2513f1e2/ccm-ugc/image_3.png)
Malheureusement, ça ne change rien... :/
Merci quand même!
jordane45
Messages postés
38429
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 février 2025
4 735
23 déc. 2017 à 22:58
23 déc. 2017 à 22:58
Je t' assure que le AVG fonctionne parfaitement ... même avec un ENUM et même sans group by (je n'avais pas vu ton WHERE)
Exemple :
![](https://img-19.ccm2.net/OyZW5ToyWtKwyBzT8ggakiuM8qA=/2039d8e682124f1385e6c7408b7695ad/ccm-ugc/exemple.png)
Donc.. tu as certainement d'autres lignes dans ta table qui correspondent à ton where...
As tu essayé de faire un truc du genre pour voir ce que ça t'affiche ?
Exemple :
DROP TABLE IF EXISTS `aaa`; CREATE TABLE IF NOT EXISTS `aaa` ( `id` int(11) NOT NULL AUTO_INCREMENT, `titre` varchar(50) DEFAULT NULL, `valeur` enum('1','2','3','4','5') DEFAULT NULL, PRIMARY KEY (`id`), KEY `titre` (`titre`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; INSERT INTO `aaa` (`id`, `titre`, `valeur`) VALUES (1, 'A', '1'), (2, 'A', '1'), (3, 'B', '2'), (4, 'B', '2'), (5, 'C', '5'), (6, 'C', '5'), (7, 'C', '5'), (8, 'C', '4');
SELECT titre, avg(valeur) as MOY FROM aaa WHERE aaa.titre = "C"
![](https://img-19.ccm2.net/OyZW5ToyWtKwyBzT8ggakiuM8qA=/2039d8e682124f1385e6c7408b7695ad/ccm-ugc/exemple.png)
Donc.. tu as certainement d'autres lignes dans ta table qui correspondent à ton where...
As tu essayé de faire un truc du genre pour voir ce que ça t'affiche ?
SELECT titre, SUM(valeur) as SOMME , COUNT(valeur) as NB FROM aaa WHERE aaa.titre = "C"
Esfriert
Messages postés
5
Date d'inscription
samedi 23 décembre 2017
Statut
Membre
Dernière intervention
23 décembre 2017
23 déc. 2017 à 23:15
23 déc. 2017 à 23:15
`Notation` -- CREATE TABLE IF NOT EXISTS `Notation` ( `Fk_ID_usager` int(11) NOT NULL, `Fk_titre` varchar(100) CHARACTER SET utf8 NOT NULL, `Valeur` enum('0','1','2','3','4','5') CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`Fk_ID_usager`,`Fk_titre`), KEY `Fk_ID_usager` (`Fk_ID_usager`), KEY `Fk_titre` (`Fk_titre`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Contenu de la table `Notation` -- INSERT INTO `Notation` (`Fk_ID_usager`, `Fk_titre`, `Valeur`) VALUES (1, 'Helix', '1'), (1, 'Jessica Jones', '4'), (1, 'Orphan Black', '3'), (2, 'Helix', '4'), (2, 'Izombie', '5'), (2, 'Jessica Jones', '4'), (2, 'Once Upon A Time', '5'), (2, 'Orphan Black', '5'), (3, 'Orphan Black', '4'), (4, 'Izombie', '5'), (5, 'Jessica Jones', '2'), (6, 'Helix', '3'), (6, 'Orphan Black', '4'), (7, 'Once Upon A Time', '4'), (8, 'Orphan Black', '3'), (9, 'Izombie', '5'), (10, 'Izombie', '3'), (10, 'Once Upon A Time', '5'), (11, 'Helix', '4'), (12, 'Helix', '4'), (12, 'Once Upon A Time', '5'), (13, 'Jessica Jones', '5'), (14, 'Izombie', '2'), (15, 'Jessica Jones', '1'), (16, 'Orphan Black', '1'), (17, 'Jessica Jones', '5');
Voilà toutes les valeurs de ma table 'Notation'. J'ai remarqué que lorsque je demande la moyenne, celle-ci n'est pas complètement fausse à proprement parler, mais il rajoute toujours 1 au calcul. Ainsi, les moyennes pour chaque séries passent de 4,75 à 5,75; de 3,2 à 4,2; etc.
Concernant la requête que tu m'as conseillé de faire, le résultat est intriguant. Il reconnait bien compter quatre valeurs, mais le total n'est pas bon.. Il trouve 23 au lieu de 19, ce qui fait que ma moyenne se décale et passe à 5,75..Mais d'où ça peut bien venir??
jordane45
Messages postés
38429
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 février 2025
4 735
>
Esfriert
Messages postés
5
Date d'inscription
samedi 23 décembre 2017
Statut
Membre
Dernière intervention
23 décembre 2017
23 déc. 2017 à 23:18
23 déc. 2017 à 23:18
Le père t'a donné la solution...
Ton énum n'est pas bon.... il ne peut pas commencer à 0
Ton énum n'est pas bon.... il ne peut pas commencer à 0
Utilisateur anonyme
23 déc. 2017 à 23:04
23 déc. 2017 à 23:04
Bonsoir
Attention à l'utilisation d'ENUM comme un nombre.
Comme le dit la doc de mysql, les valeurs numériques attribuées aux valeurs d'un ENUM commencent à 1, et non pas à 0
Quand Jordane (que je salue au passage ) définit enum('1','2','3','4','5'), les valeurs numériques correspondantes sont alors (1,2,3,4,5), on a l'impression que tout va bien
Quand Esfriert définit enum('0','1','2','3','4','5'), les valeurs numériques correspondantes sont alors (1,2,3,4,5,6) et la traduction de l'ENUM en nombre donne 1 de plus.
Attention à l'utilisation d'ENUM comme un nombre.
Comme le dit la doc de mysql, les valeurs numériques attribuées aux valeurs d'un ENUM commencent à 1, et non pas à 0
Quand Jordane (que je salue au passage ) définit enum('1','2','3','4','5'), les valeurs numériques correspondantes sont alors (1,2,3,4,5), on a l'impression que tout va bien
Quand Esfriert définit enum('0','1','2','3','4','5'), les valeurs numériques correspondantes sont alors (1,2,3,4,5,6) et la traduction de l'ENUM en nombre donne 1 de plus.
jordane45
Messages postés
38429
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 février 2025
4 735
23 déc. 2017 à 23:08
23 déc. 2017 à 23:08
Bien vu.. je n'avais pas fait attention qu'il commençait à "0" ...
Donc.. en effet... la valeur ne peut pas être la bonne.
Donc.. en effet... la valeur ne peut pas être la bonne.
Esfriert
Messages postés
5
Date d'inscription
samedi 23 décembre 2017
Statut
Membre
Dernière intervention
23 décembre 2017
23 déc. 2017 à 23:20
23 déc. 2017 à 23:20
Compris! Il y aurait une solution pour faire en sorte de tout de même pouvoir utiliser 0, en changeant de type par exemple?
jordane45
Messages postés
38429
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 février 2025
4 735
23 déc. 2017 à 23:21
23 déc. 2017 à 23:21
En utilisant le type INT ou TINYINT
Ça va marcher si tu utilises le type INT ou TINYINT.
Si tu le fais avec phpmyadmin sur une base déjà existante, tu remarqueras que toutes tes valeurs vont augmenter de 1 quand tu remplaceras le type ENUM par un type INT.
Il suffira de faire
Si tu le fais avec phpmyadmin sur une base déjà existante, tu remarqueras que toutes tes valeurs vont augmenter de 1 quand tu remplaceras le type ENUM par un type INT.
Il suffira de faire
UPDATE Notation SET Valeur=Valeur-1pour remettre les bonnes valeurs
Esfriert
Messages postés
5
Date d'inscription
samedi 23 décembre 2017
Statut
Membre
Dernière intervention
23 décembre 2017
23 déc. 2017 à 23:32
23 déc. 2017 à 23:32
Merci beaucoup, ça m'a débloqué! J'aurais pas trouvé de sitôt sans votre aide :D !