MySQL - Calcul de centile, mediane [Résolu]

Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
- - Dernière réponse : yg_be
Messages postés
8296
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2019
- 10 août 2019 à 18:50
Bonjour,

J'ai une base de données avec des notes, des matière etc... et je souhaite calculer des centiles de ces moyennes.
J'ai déjà créer une requête qui m'affiche toutes les moyennes dans une matière :

SELECT id_matiere, ROUND(SUM(moyenne * matiere_module.coef)/ SUM(matiere_module.coef), 2) as moyenneMa, id_etu
FROM matiere_module,
(
SELECT module, id_etu, SUM(note*coef)/ SUM(coef) as moyenne
FROM bulletin
WHERE promo = '2022'
GROUP BY module, id_etu
) as moyennes
WHERE nom_module = module AND id_matiere = '3'
GROUP BY id_matiere, id_etu


Je cherche maintenant a calculer le 20% centile, le 40%centile etc...
En fouillant sur google, j'ai trouvé cette requete :


SELECT
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
GROUP_CONCAT(field_name ORDER BY field_name SEPARATOR ','),
',', 95/100 * COUNT(*) + 1), ',', -1) AS DECIMAL) AS `95th Per`
FROM table_name;


Je l'ai essayé sur une table test avec juste des moyennes, et elle fonctionne. Par contre je n'arrive pas a la faire fonctionner avec ma requete précédente...

Merci d'avance pour vos idées et votre aide

Victor

Configuration: Windows / Firefox 68.0
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
8296
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2019
412
1
Merci
bonjour, qu'as-tu essayé?

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 58271 internautes nous ont dit merci ce mois-ci

victorberson
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
2 -
il ne connait visiblement pas le terme DECIMAL
Peut etre je le place au mauvais endroit.. Où le mettrais-tu?
yg_be
Messages postés
8296
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2019
412 > victorberson
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
-
à la place de
DECIMAL
victorberson
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
2 -
SELECT
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
GROUP_CONCAT(moyenne ORDER BY moyenne SEPARATOR ','),
',', 95/100 * COUNT(*) + 1), ',', -1) AS DECIMAL(,2) ) AS `95th Per`
FROM test

Ceci ne fonctionne pas..
yg_be
Messages postés
8296
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 août 2019
412 > victorberson
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
-
"ne fonctionne pas": symptôme?
et avec FLOAT au lieu de DECIMAL?
victorberson
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
2 -
Rectification, j'ai trouvé l'erreur :
SELECT
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
GROUP_CONCAT(moyenneMa ORDER BY moyenneMa SEPARATOR ','),
',', 49/100 * COUNT(*) + 1), ',', -1) AS DECIMAL(11,2)) AS `95th Per`
FROM (SELECT id_matiere, ROUND(SUM(moyenne * matiere_module.coef)/ SUM(matiere_module.coef), 2) as moyenneMa, id_etu
FROM matiere_module,
(
SELECT module, id_etu, SUM(note*coef)/ SUM(coef) as moyenne
FROM bulletin
WHERE promo = '2022'
GROUP BY module, id_etu
) as moyennes
WHERE nom_module = module AND id_matiere = '3'
GROUP BY id_matiere, id_etu ) as moyenneG

Merci pour ton aide
Commenter la réponse de yg_be