Calculer le 95e centile avec MySQL

mardi 10 mai 2016 :: perrick :: MySQL :: aucun commentaire :: aucun trackback

Avant de mettre PHP 7 en production sur nos serveurs pour Opentime, nous avons décidé d'ajouter quelques graphes de supervision dans notre Munin. Les données sont déjà stockées dans une table SQL mais l'affichage était pour le moins sommaire. Une question est vite remontée à la surface : comment calculer le 95e centile avec MySQL ?

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;

Merci à Nicolas Poggi et surtout à Roland Bouman pour les pointeurs les plus convaincants.