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

DB2 Discussion :

[DB2]Requête regroupement par intervals


Sujet :

DB2

  1. #1
    sm
    sm est déconnecté
    Nouveau Candidat au Club
    Inscrit en
    Août 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [DB2]Requête regroupement par intervals
    Je suis novice dans l'art de poser des requêtes SQL (DB2)
    J'ai le pb suivant:

    Dans une table j'ai par un N° client et son niveau de risque (nombre de 0 à 499)

    Exemple:
    N° Niv Risq
    112011 001
    145011 250
    154012 315

    Je souhaite connaître le nombre de mes clients par classe de risque.
    Classe 1 : 0<=Niv Risq<=99
    Classe 2 : 100<=Niv Risq<=199
    Classe 3 : 200<=Niv Risq<=399
    Classe 4 : 400<=Niv Risq<=499

    Quelle requête poser?
    D'avance merci

    SM

  2. #2
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    En définissant une colonne : Classe de risque.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    N°      Niv Risq   Cls risq
    112011  001        1
    145011  250        3
    154012  315        3
    Pour l'exemple donné ci-dessus :
    Classe 1 : 0<=Niv Risq<=99
    Classe 2 : 100<=Niv Risq<=199
    Classe 3 : 200<=Niv Risq<=399
    Classe 4 : 400<=Niv Risq<=499

    La requête sera alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SUM() AS NbClient, Classe
    FROM MaTable
    GROUP BY Classe
    ORDER BY Classe

  3. #3
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    En Sql tu peux aussi utiliser des fonctions . Si j'en crois ton exemple, Risq est de type string. Alors tu peux faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT count() AS NbClient, substr(risq,1,1) as Classe 
    FROM MaTable 
    GROUP BY substr(risq,1,1)
    ORDER BY classe
    Et voila le travail.

  4. #4
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Ca ne marchera pas avec la classe 3 car elle comprend les niveaux de risque de 200 à 399.

    Il va devoir être obligé de créer une 5° classe s'il ne veut pas créer une 3 colonne (classe de risque), soit :

    Classe 1 : 000<=Niv Risq<=099
    Classe 2 : 100<=Niv Risq<=199
    Classe 3 : 200<=Niv Risq<=299
    Classe 4 : 300<=Niv Risq<=399
    Classe 5 : 400<=Niv Risq<=499

    Il faudra aussi mettre un 0 (zéro) devant la niveau de risque pour la classe 1.

  5. #5
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Oui exacte je n'avais pas fait attention. Il peut créer sa propre fonction mais c'est une autre histoire

  6. #6
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Si le nombre de classe est réduit, il reste encore comme solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT count() AS nbr,'1' AS classe FROM Client WHERE int(Risq)<=99
    UNION
    SELECT count() AS nbr,'1' AS classe FROM Client WHERE int(Risq)>=100 AND int(Risq)<=199
    UNION
    SELECT count() AS nbr,'1' AS classe FROM Client WHERE int(Risq)>=200 AND int(Risq)<=399
    UNION
    SELECT count() AS nbr,'1' AS classe FROM Client WHERE int(Risq)>=400 AND int(Risq)<=499

  7. #7
    sm
    sm est déconnecté
    Nouveau Candidat au Club
    Inscrit en
    Août 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour toutes ces idées. Je pense que l'on ne peut pas utiliser GROUP BY avec une opération sur une colonne. Qu'en pensez vous?

  8. #8
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Je viens de tester.
    Apparement, ce n'est pas possible.

  9. #9
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Points : 65
    Points
    65
    Par défaut Re: PB de débutant SQL en environnement DB2
    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
    Select
               a.CLASSE , count( * )
    from
            ( select
                         case
                            when Niv_Risq between 0 and 99 then 'Classe 1'
                            when Niv_Risq between 100 and 200 then 'Classe2'
                            When .........
                             else 'Classe X'
                         end CLASSE
               from
                         client
             ) as a
    group by
              a.CLASSE
    Mais la methode à utiliser passe par une bonne modélisation
    Table N_RISQUE des niveaux de risque +
    Table C_RISQUE des classes de risque

    Une table RISQUE peut suffire si Niv_risq entre deux bornes numériques
    Classe_risq Libelle
    99 classe 1
    199 classe 2
    999 Classe X

    Un NIV_RISQ ne pouvant etre créé dans client si une CLASSE_RISQ >= n'existe pas dans RISQUE

    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
    Select
               b.libelle , count( * )
    from 
            ( select
                         min( b.classe_risq ) classe_risq
              from
                         client         a ,
                         risque     b 
              where
                         b.classe_risq >= a.niv_risq
            ) as a
          inner join
             risque b
          on
              b.classe_risq = a.classe_risq
    group by
              b.libellé

Discussions similaires

  1. Requête regroupement par semaine
    Par stade13 dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/04/2013, 18h55
  2. créer une requête pour regrouper par mois
    Par kuhnden dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 26/01/2008, 13h41
  3. Requête qui regroupe par catégorie
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 30/11/2007, 17h45
  4. Modifier valeur table par requête regroupement
    Par Pierren dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 12/04/2007, 11h18
  5. [Requête] Regroupement par mois en cours
    Par Burnout dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/01/2006, 09h36

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