MySQL - Calcul de centile, mediane

Résolu/Fermé
victorberson Messages postés 139 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 14 août 2019 - 10 août 2019 à 12:00
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 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
A voir également:

1 réponse

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
10 août 2019 à 12:03
bonjour, qu'as-tu essayé?
1
victorberson Messages postés 139 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 14 août 2019 5
10 août 2019 à 12:04
J'ai essayé ceci :


SELECT
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(
GROUP_CONCAT(moyenneMa ORDER BY moyenneMa SEPARATOR ','),
',', 49/100 * COUNT(*) + 1), ',', -1) AS DECIMAL) 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
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > victorberson Messages postés 139 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 14 août 2019
10 août 2019 à 12:06
et cela a donné quoi?
0
victorberson Messages postés 139 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 14 août 2019 5
10 août 2019 à 12:08
11 alors que les moyennes sont : 10.96; 9.61;10.63
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > victorberson Messages postés 139 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 14 août 2019
10 août 2019 à 12:16
avais-tu uniquement des nombres entiers dans ta table de test?
0
victorberson Messages postés 139 Date d'inscription samedi 19 juillet 2014 Statut Membre Dernière intervention 14 août 2019 5
10 août 2019 à 12:25
Non, même avec des nombres décimaux cela fonctionne sur ma table test. Le résultat est un entier (il supprime la partie décimale) mais il donne le bon résultat. Si le résultat etait le nombre décimal exact ca serait encore mieux mais bon.. j'essaie déjà d'adapter la requete
0