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

Langage SQL Discussion :

Remplacer les valeurs manquantes par la moyenne


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut Remplacer les valeurs manquantes par la moyenne
    Bonjour à tous,

    j'ai une base avec des titres financiers. A chaque titre financier est associé un secteur et un nombre qu'on appellera indice (et dont je ne détaille pas la signification).

    Certains titres n'ont pas d'indice associé. Je souhaite faire une mise à jour de la base qui remplace ces valeurs manquantes par la moyenne de l'indice pour les autres titres appartenant au même secteur.

    Pour le moment, j'ai réussi ceci :

    SELECT secteur, AVG(indice) FROM [base$] WHERE ISNUMERIC(indice) GROUP BY secteur

    qui me renvoie :

    Secteur_1                                    68.4
    Secteur_2                                   108.3
    Secteur_3                                   470.5
    Secteur_4                                     36.7
    Secteur_5                                     19.4
    Secteur_6                                   278.1
    Secteur_7                                     29.1
    Secteur_8                                 1062.2
    Secteur_9                                     28.4
    Secteur_10                         2956.4
    J'ai par ailleurs réussi à faire ceci :

    UPDATE [base$] SET indice = 3.14159 WHERE NOT ISNUMERIC(indice)

    qui me remplace toutes mes valeurs manquantes par 3,14159.

    Bien entendu, je souhaite désormais combiner les deux requêtes pour, à la place du 3,14159, avoir la moyenne sectorielle que j'ai réussi à calculer dans la première requête.

    Comment puis-je combiner mes deux codes pour arriver à mon objectif ?

    Je vous remercie

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Essayez quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    update tab1 T1
       set T1.col1 = (SELECT DIGITS(COALESCE(AVG(col2),0))
                       from tab2 T2
                      where T2.colx = T1.colx)
       where T1.col1 is null
          or isnumeric(T1.col1) = 0
    EDIT : je viens de modifier pour ajouter une fonction DIGITS, car j'avais oublié que votre colonne cible est de type char (ou varchar)

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut
    Merci pour le retour. Je vais essayer d'adapter ce code, mais je n'ai qu'une seule base dans mon cas. Or dans ton exemple, tu mentionnes deux tables. Du coup, je ne suis pas sûr que ce soit exactement la solution à mon problème. Je regarde et je te redis ça.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    En ce cas l'adaptation est minime, cf. en rouge ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update tab1 T1
       set T1.col1 = (SELECT DIGITS(COALESCE(AVG(col2),0))
                      from tab1 T2
                      where T2.colx = T1.colx)
       where T1.col1 is null
          or isnumeric(T1.col1) = 0

Discussions similaires

  1. Remplacer les valeurs manquantes dans une table SAS
    Par the_programmer dans le forum SAS Base
    Réponses: 1
    Dernier message: 04/03/2013, 10h28
  2. Réponses: 3
    Dernier message: 09/12/2010, 13h38
  3. Réponses: 11
    Dernier message: 19/10/2010, 14h50
  4. Réponses: 5
    Dernier message: 27/10/2008, 14h53
  5. Remplacer les valeurs NULL par d'autres valeurs
    Par salmer dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/11/2006, 15h20

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