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 :

Somme d'un count


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut Somme d'un count
    Bonjour,

    J'ai un petit souci technique avec une requete.

    Je ne sais même pas comment exposer mon probleme a vrai dire, tellement je trouve que c'est compliqué, on va tenter de faire simple.

    En gros, j'ai un select avec dedans une somme et un count.

    Le group by fonctionne pour les deux. Le problème, c'est que je dois rajouter une condition qui porte sur mon select..

    Rha, je m'embrouille, avec le code, ca ira mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT COUNT(DISTINCT LNOMRDCLI) AS NB_CLIENTS, CVALISIN, CPLCOT, CSENSOP, SUM(QTITOPCRN) AS NB_TRANSACTIONS
    FROM (SELECT LNOMRDCLI, CVALISIN, CPLCOT, CSENSOP, QTITOPCRN 
          FROM FANEJO, IRCDCPT 
          WHERE CPLCOT IN ('011', '025', '027','028' ,'029' , '030', '031', '032', '038', '051')
          AND LNOMRDCLI = LRDCPTE AND (FANEJO.CETINV = 00499 OR FANEJO.CETINV = 00820)
          AND DXTEC1 > '20060418' AND DXTEC1 < '20060430' AND FANEJO.CDOS > 100000
          )
    GROUP BY CVALISIN,  CSENSOP, CPLCOT
    ORDER BY CVALISIN ASC, NB_CLIENTS DESC

    Alors, en gros, ca me retourne pour chaque CVALISIN un ou deux tuples, avec pour chaque tuple un nombre de clients: exemple:

    NB_CLIENTS CVALISIN CPLCOT CSENSOP NB_TRANSACTIONS

    7 AN8068571086 025 A 42029
    2 AN8068571086 025 V 50686

    Or, j'ai une condition à ajouter sur le nombre de clients par CVALISIN, NB_CLIENTS > 10 ...

    Je ne sais pas comment faire, j'ai tenté pas mal de requete, genre un sum(count...) avec un where ensuite, mais ca marche pas non plus..


    Enfin, j'espere que vous comprenez le pb, si tel n'est pas le cas, je prendrais le temps d'exposer ca de facon plus précise

    Merci


    PS: jointure externe? ( on verra bien, mais moi pas aimer ca, enfin, elles pas aimer moi )

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    Petite précision au passage:

    La condition du nombre de clients > 10 pour chaque CVALISIN éliminera par exemple sur le résultat actuel :

    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
    79	AN8068571086	025	A	42029
    72	AN8068571086	025	V	50686
    49	BE0003796134	025	A	54547
    30	BE0003796134	025	V	45068
    5	BE0003801181	038	V	62700
    9	BE0160342011	025	A	3929
    8	BE0160342011	025	V	3894
    45	BMG988431240	025	A	381114
    38	BMG988431240	025	V	99462
    10	CA0137161059	025	A	6072
    8	CA0137161059	025	V	3616
    10	CA0679011084	025	V	5511
    8	CA0679011084	025	A	3852
    2	CA8584971003	025	A	10500
    1	CA8584971003	025	V	7500

    Les tuples:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    5	BE0003801181	038	V	62700
     
    2	CA8584971003	025	A	10500
    1	CA8584971003	025	V	7500
    Mais me laissera les autres tuples avec les colonnes completes..

    (oui je sais, j'en demande beaucoup )

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    J'ai pas trop regardé la requete, mais en utilisant la clause HAVING ça doit marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CVALISIN, COUNT(DISTINCT LNOMRDCLI)
    FROM ... 
    GROUP BY CVALISIN
    HAVING COUNT(DISTINCT LNOMRDCLI) > 10

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    Citation Envoyé par McM
    J'ai pas trop regardé la requete, mais en utilisant la clause HAVING ça doit marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CVALISIN, COUNT(DISTINCT LNOMRDCLI)
    FROM ... 
    GROUP BY CVALISIN
    HAVING COUNT(DISTINCT LNOMRDCLI) > 10

    Je suis d'accord, mais comme je l'ai dit, je veux conserver les champs actuels, genre CSENSOP, et si je le met dans le select, ca ne marche plus, d'où l'idée de le jointure externe... :/

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    J'ai amélioré ma premiere requete, en enlevant les select imbriqués:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT COUNT( DISTINCT LNOMRDCLI) AS NB_CLIENTS, CVALISIN, CPLCOT, CSENSOP, SUM(QTITOPCRN) AS NB_TRANSACTIONS
    FROM FANEJO, IRCDCPT
    WHERE CPLCOT IN ('011', '025', '027','028' ,'029' , '030', '031', '032', '038', '051')
    AND LNOMRDCLI = LRDCPTE AND (FANEJO.CETINV = 00499 OR FANEJO.CETINV = 00820)
    AND DXTEC1 > '20060418' AND DXTEC1 < '20060430' AND FANEJO.CDOS > 100000
    GROUP BY CVALISIN,  CSENSOP, CPLCOT
    ORDER BY CVALISIN ASC, NB_CLIENTS DESC;

    Et ensuite, j'ai tenté un NOT IN de mon CVALISIN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT COUNT( DISTINCT LNOMRDCLI) AS NB_CLIENTS, CVALISIN, CPLCOT, CSENSOP, SUM(QTITOPCRN) AS NB_TRANSACTIONS
    FROM FANEJO, IRCDCPT
    WHERE CPLCOT IN ('011', '025', '027','028' ,'029' , '030', '031', '032', '038', '051')
    AND LNOMRDCLI = LRDCPTE AND (FANEJO.CETINV = 00499 OR FANEJO.CETINV = 00820)
    AND DXTEC1 > '20060418' AND DXTEC1 < '20060430' AND FANEJO.CDOS > 100000
    AND CVALISIN NOT IN (SELECT CVALISIN 
                          FROM FANEJO, IRCDCPT
                          WHERE LNOMRDCLI = LRDCPTE
                          AND (FANEJO.CETINV = 00499 OR FANEJO.CETINV = 00820)
                          AND DXTEC1 > '20060418' AND DXTEC1 < '20060430' AND FANEJO.CDOS > 100000
                          GROUP BY CVALISIN, CPLCOT
                          HAVING COUNT(DISTINCT LNOMRDCLI) < 10)
    GROUP BY CVALISIN,  CSENSOP, CPLCOT
    ORDER BY CVALISIN ASC, NB_CLIENTS DESC;

    Mais là, c'est le drame, j'ai du arreter ma requete qui tourne dans la semoule après 1700 secondes

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    aie aie aie, je comprends rien!!


    J'ai fait un IN ... > 10 au lieu de NOT IN ... < 10

    Trois secondes la requête!!

    Quelqu'un a une explication rationnelle

Discussions similaires

  1. [ODBC] Faire la somme d'un count dans une requête
    Par razily dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 16/06/2010, 11h57
  2. Somme de count et having
    Par Christophe P. dans le forum SQL
    Réponses: 2
    Dernier message: 21/05/2008, 09h37
  3. Somme de count() , requete imbriqué?
    Par mamiberkof dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/03/2008, 16h10
  4. [XI][Logiciel] Somme d'un count
    Par Shahix dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 08/08/2007, 08h58
  5. Somme de 3 COUNT() sur 3 tables différentes
    Par PyRoFlo dans le forum Langage SQL
    Réponses: 9
    Dernier message: 13/08/2004, 18h36

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