IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Calcul de médiane MySQL


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut Calcul de médiane MySQL
    Bonjour,

    J'ai besoin de calculer la médiane d'une colonne (note) d'une table (table1) et ce pour les 7 derniers jours glissants (colonne : date).

    SGBD : MySQL

    Merci de votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY note)   
                                OVER (PARTITION BY DATE ROWS BETWEEN 3 PRECEDNING AND 3 FOLLOWING) AS NOTE_MEDIANE
    FROM T_NOTES
    Je ne sais si PERCENTILE... est disponible sous MySQmerde qui en es à peine à la norme SQL de 1992 par rapport à la concurrence...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut
    Merci. Visiblement ça ne fonctionne pas :

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP (ORDER BY NOTE)
    OVER (PARTITION BY DAT' at line 1


    J'ai aussi essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NOTE, PERCENTILE_DISC(.50) WITHIN GROUP (ORDER BY NOTE) OVER() AS MEDIANE FROM TABLE;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NOTE, PERCENTILE_CONT(.50) WITHIN GROUP (ORDER BY NOTE) OVER() AS MEDIANE FROM TABLE;
    Mais pas mieux.

    Aurais-tu une autre solution ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut
    J'ai trouvé une solution, mais il me manque un élément.

    En fait j'y arrive avec deux requêtes :


    // La première pour obtenir le nombre de lignes de la colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CEIL(COUNT(*)/2) FROM TABLE;
    Résultat : 57

    // La seconde pour le calcul de la médiane :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT MAX(NOTE) AS MEDIANE
    FROM
      (SELECT NOTE
      FROM TABLE
      ORDER BY NOTE LIMIT
        57
      ) x;
    Problème : Il me faut faire deux requêtes. Il faudrait imbriquer le premier SELECT dans la seconde requête dans le "LIMIT" pour n'avoir qu'une seule requête.

    J'ai fais plusieurs tests sans succès pour imbriquer ces deux requêtes.

    Une idée ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Essayez :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT MAX(NOTE) AS MEDIANE
    FROM (SELECT NOTE
          FROM   TABLE
          ORDER  BY NOTE LIMIT (SELECT CEIL(COUNT(*)/2) FROM TABLE))
    Mais attention cela peut être faux dans beaucoup de cas…

    je vous invite à lire le papier que j'ai écrit à ce sujet :
    https://sqlpro.developpez.com/optimisation/mediane/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 34
    Par défaut
    J'ai une erreur avec celle-ci :

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT CEIL(COUNT(*)/2) FROM TABLE))' at line 4

Discussions similaires

  1. Arbre ORB et calcul de médiane
    Par Heimdall dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 0
    Dernier message: 16/01/2012, 23h30
  2. [AC-2000] Erreur "ByRef" pour un calcul de Médiane
    Par Cantalou dans le forum VBA Access
    Réponses: 16
    Dernier message: 24/11/2009, 12h47
  3. [MySQL] Calculs en PHP / MySQL
    Par pasbonte dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/03/2008, 19h53
  4. [MySQL] Performance : calendrier calculé ou en mysql ?
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/05/2007, 20h25
  5. Stat calculer : Quartile ? Médiane ? ...
    Par Beamish dans le forum Access
    Réponses: 8
    Dernier message: 01/12/2005, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo