MySQL - Calcul de centile, mediane
Résolu
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 :
Je cherche maintenant a calculer le 20% centile, le 40%centile etc...
En fouillant sur google, j'ai trouvé cette requete :
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
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
-
Contributeur Ambassadeurbonjour, qu'as-tu essayé?
-
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 -
Contributeur Ambassadeur@victorbersonet cela a donné quoi?
-
-
Contributeur Ambassadeur@victorbersonavais-tu uniquement des nombres entiers dans ta table de test?
-
-