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 :

Calcul de fréquence


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut Calcul de fréquence
    Bonjour,

    J'ai une selection SQL qui me renvoie:
    -1
    2
    3
    -2
    3
    -3
    0
    0
    -2
    1

    et je voudrais obtenir un tableau de fréquence du genre:

    var freq
    -3 1
    -2 2
    -1 1
    0 2
    1 1
    2 1
    3 2

    J'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT var,
        COUNT(var) OVER (PARTITION BY var) FREQ
    FROM selection
    ORDER BY var;
    Je veux que ce code marche pour différentes sélections en gardant toujours toutes les valeurs de var. Voici un exemple pour être plus claire:

    var
    1
    2
    0
    -3
    1
    2


    Si je ré-utilise le code ci-dessus, j'obtiens:

    var freq
    -3 1
    0 1
    1 2
    2 2

    et je voudrais avoir:

    var freq
    -3 1
    -2 0
    -1 0
    0 1
    1 2
    2 2
    3 0

    Comment faire pour afficher dans mon tableau de fréquence les valeurs ayant une fréquence de 0?

    Merci a tous

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous créer votre vue de référence puis faites une jointure externe dessus :
    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
    19
    SELECT
        sr.var,
        count(sl.var) as freq
    FROM
        (
        select -3 as var union all 
        select -2        union all 
        select -1        union all 
        select  0        union all 
        select  1        union all 
        select  2        union all 
        select  3
        ) sr
        left outer join selection sl
          on sl.var = sr.var
    group by
         sr.var
    order by
         sr.var asc
    Pour votre requête initiale, pas besoin de fonction de fenêtrage, un simple agrégat suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      SELECT var, count(*) as freq
        FROM selection
    GROUP BY var
    ORDER BY var;

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Merci beaucoup de m'avoir répondu! Je vais étudier votre code ( je débute donc je voudrais d'abord bien comprendre ce que j'écris).

    J'ai un autre problème qui se pose concernant mon calcul de fréquence. Ma sélection réelle se présente plus comme ceci:

    semaine var
    476 -1
    476 2
    476 0
    476 3
    577 -1
    577 2

    Quand je calcule la fréquence de var, j'ai la fréquence totale:
    var freq
    -1 2
    0 1
    2 2
    3 1

    Or je voudrais avoir les fréquences par semaine, c'est-a-dire:
    sem var freq
    476 -1 1
    476 0 1
    476 2 1
    476 3 1
    577 -1 1
    577 2 1


    Comment puis-je faire ca simplement??

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Quel est votre SGBD ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    Je suis sous Oracle

    Est-ce possible en modifiant : COUNT(var) OVER (PARTITION BY var) FREQ??

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    J'ai remplacé par ,(COUNT(TIWR_qst_ans) OVER (PARTITION BY tiwr_qst_ans ORDER BY tima_key)/4) FREQ


    et j'ai l'impression d'obtenir les bons résultats ( il faudrait que je teste ce qui va me prendre du temps).

    est-ce que cela te parait bon sachant que j'ai au total 4 semaines??

    ( en fait, j'ai divisé par 4 parce que j'ai senti que les résultats auraient l'air bon, mais je ne comprends pas pourquoi ils le sont ( si c'est bien le cas)

Discussions similaires

  1. Calcul de fréquence
    Par melwin dans le forum Général Python
    Réponses: 8
    Dernier message: 01/05/2012, 01h02
  2. probleme de calcule de fréquence
    Par étoile de mer dans le forum Débuter
    Réponses: 0
    Dernier message: 18/10/2009, 21h14
  3. Calcul de fréquence via FFT
    Par jericho dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/02/2008, 10h14
  4. Calculer une fréquence relative
    Par Ptinéwik dans le forum MATLAB
    Réponses: 9
    Dernier message: 16/01/2008, 15h18

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