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

Signaler
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
-
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
-
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

1 réponse

Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656
bonjour, qu'as-tu essayé?
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
3
il ne connait visiblement pas le terme DECIMAL
Peut etre je le place au mauvais endroit.. Où le mettrais-tu?
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019

à la place de
DECIMAL
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
3
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..
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
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?
Messages postés
139
Date d'inscription
samedi 19 juillet 2014
Statut
Membre
Dernière intervention
14 août 2019
3
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