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

Oracle Discussion :

[SQL-Oracle]Calcul de la médiane


Sujet :

Oracle

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mai 2004
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 236
    Points : 310
    Points
    310
    Par défaut [SQL-Oracle]Calcul de la médiane
    Bonjour,

    Système : Oracle 8.1.7 sur windows xp

    Contexte : Dans le cadre d'une requête, je cherche à faire le calcul de la médiane d'un jeu d'enregistrement. Malgré mes recherches, je n'ai pas encore trouvé la fonction oracle qui me permettrait de faire mon calcul. Si quelqu'un connait cette fonction, n'hésitez pas à répondre.


    Merci d'avance de vos réponses.

    Fdraven

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    je n'ai pas de 8i pour tester, mais sur ma machine je peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    SCOTT@LSC01> select sal,median(sal) over () from emp;
            SAL MEDIAN(SAL)OVER()
    ---------- -----------------
           800              1550
           950              1550
          1100              1550
          1250              1550
          1250              1550
          1300              1550
          1500              1550
          1600              1550
          2450              1550
          2850              1550
          2975              1550
          3000              1550
          3000              1550
          5000              1550
    mais sans doute du 10g

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    La fonction analytique MEDIAN n'est disponible qu'à partir de la 10g

    De plus, attention en oracle 8i, les fonctions analytiques ne sont disponibles que pour la entreprise edition.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    et les aggrégats utilisateur avec l'interface ODCIAggregate ? Sans doute du 9i, non?

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    je pense qu'il faut donc créer soit même sa fonction en pl/sql, qui ouvrira un curseur pour chacune des lignes (bonjour la performance)...

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Il faut ré-ouvrir les vieux bouquins de math quoi...

    Pour le calcul de la mediane, il faut d'abord calculer le rang d'une valeur par rapport à sont classement. Puis prendre:
    - soit la valeur milieu (nombre de lignes impair)
    - soit la moyenne des 2 valeurs autour du millieu (nombre de lignes pairs)

    pour résumer les 2 points, on peut dire qu'on prend la moyenne des valeur situées entre (milieu - 0.5) et (milieu + 0.5)

    donc je verrais bien un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    select avg(sal) from
     (
      select sal ,
        row_number() over (order by sal) rang,
        count(*) over () nb_lignes 
      from emp 
     )
    where rang between nb_lignes / 2 and  1 + nb_lignes / 2
    ou, sans utiliser les fonction analytiques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    select avg(sal) from
     (
     select sal,rownum rang,(select count(*) from emp) nb_lignes from
      (
      select sal 
      from emp order by sal
      )
     )
    where rang between nb_lignes / 2 and  1 + nb_lignes / 2
    Dans les 2 cas le plan d'exécution fait un seul SORT sur un FULL_SCAN, donc un truc tout à fait normal....

Discussions similaires

  1. [Oracle] fonction pl/sql pour calcul pwd
    Par shaun_the_sheep dans le forum PL/SQL
    Réponses: 7
    Dernier message: 02/06/2006, 16h38
  2. [PL/SQL - Oracle 9i] CLOB et owa_pattern
    Par rebolon dans le forum Oracle
    Réponses: 9
    Dernier message: 18/11/2004, 16h28
  3. Generer du xml via SQL(oracle) avec de l'asp
    Par jpg dans le forum XQUERY/SGBD
    Réponses: 6
    Dernier message: 03/08/2004, 13h36
  4. [SQL ORACLE] Soustraction de deux timestamps
    Par platinum07 dans le forum SQL
    Réponses: 34
    Dernier message: 02/07/2004, 11h42
  5. PL/SQL ORACLE (Record Dans un Varchar2)
    Par argoet dans le forum PL/SQL
    Réponses: 24
    Dernier message: 14/05/2004, 17h06

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