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 :

[Oracle] select count


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Oracle] select count
    bonjour,
    je bloque sur un pb de count avec la sélection de plusieurs champs.

    je voudrais en fait obtenir le résultat suivant :

    ch1 | ch2 | ch3 | ch4...
    -------------------------
    100 | 1 | 3 | ...
    100 | 2 | 3 | ...
    100 | 3 | 3 | ...
    101 | 10 | 2 | ...
    101 | 11 | 2 | ...
    106 | 20 | 3 | ...

    où ch3 représente le nombre de ch2 par ch1.

    Mon pb est que je veux que ce nombre (ch3) se répète pour toutes les lignes ayant le même ch1.

    J'ai l'impression que je ne peux pas le faire en une seule fois mais même en plusieurs fois (avec en updatant le champ ch3) j'ai du mal.

    Je travaille sur une base oracle.

    Est-ce que quelqu'un a une idée? Merci d'avance...

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Points : 166
    Points
    166
    Par défaut
    Salut,

    Est ce que le code suivant convient ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select ch1, count(*) AS 'ch3'
    from MaTable
    group by ch1

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Citation Envoyé par mdevlieg
    Salut,

    Est ce que le code suivant convient ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select ch1, count(*) AS 'ch3'
    from MaTable
    group by ch1
    Tu voulais dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select ch1, ch2, count(*) AS 'ch3'
    from MaTable
    group by ch1, ch2
    , je suppose...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    et bien ça me renvoit
    ch1 | ch3
    ----------
    100 | 3
    101 | 2
    106 | 1

    mais moi je voudrais que le nombre de 3 (par exemple) se répète 3 fois, pour chaque ligne où ch1=100 (car 3 ch2 correspondent à ch1=100).

    Ne faut-il pas passer par une vue qui ferait le count dans un 1er temps puis ensuite mettre à jour le champ ch3?
    Ou alors passer par un trigger qui à chaque insertion met à jour ch3? Mais ca me parait assez lourd comme solution...

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Toutes mes excuses, j'avais mal lu :

    Cette requête doit répondre à ta question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT  ch1
        ,   ch2
        ,   COUNT(*) OVER (PARTITION BY ch1)    AS ch3
    FROM    MaTable
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Points : 166
    Points
    166
    Par défaut
    Salut,

    Il y a certainement mieux,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select ch1, (select count(*) from MaTable t where t.ch1 = t1.ch1) AS 'ch3'
    from MaTable t1

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    une simple sous-requête suffit :

    Voici mon jeu d'essais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE MaTable (
    ch1 NUMBER (10),
    ch2 NUMBER (10));
     
    INSERT INTO MaTable VALUES (100, 1);
    INSERT INTO MaTable VALUES (100, 2);
    INSERT INTO MaTable VALUES (100, 3);
    INSERT INTO MaTable VALUES (101, 10);
    INSERT INTO MaTable VALUES (101, 11);
    INSERT INTO MaTable VALUES (106, 20);
    COMMIT;
    Et la requête (avec son résultat) :

    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
    SQL> SELECT ch1, ch2, (SELECT COUNT(*)
      2                      FROM MaTable T2
      3                     WHERE T2.ch1 = T1.ch1) AS ch3
      4    FROM MaTable T1;
     
           CH1        CH2        CH3
    ---------- ---------- ----------
           100          1          3
           100          2          3
           100          3          3
           101         10          2
           101         11          2
           106         20          1
     
    6 ligne(s) sélectionnée(s).
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 802
    Points
    30 802
    Par défaut
    Si cette syntaxe n'est pas supportée par ton SGBD (ANSI SQL-2003), tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  detail.ch1
        ,   detail.ch2
        ,   compte.ch3
    FROM    MaTable AS detail
        INNER JOIN
            (   SELECT  ch1
                    ,   COUNT(*) AS ch3
                FROM    MaTable
                GROUP BY    ch1   
            )   AS  Compte
            ON  detail.ch1  = compte.ch1
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour toutes vos réponses!

    cette requete me convient tout à fait :

    SQL> SELECT ch1, ch2, (SELECT COUNT(*)
    2 FROM MaTable T2
    3 WHERE T2.ch1 = T1.ch1) AS ch3
    4 FROM MaTable T1;

    elle fait exactement ce que je voulais...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/07/2007, 17h04
  2. [Java][debutant]select count(*) ne retourne rien !!
    Par Invité dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/01/2007, 11h39
  3. [Oracle] select count(..) et Oracle 10G
    Par onclebob dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/09/2005, 15h04
  4. [Performance] RecordCount ou select Count(champ) ?
    Par shwin dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 28/09/2004, 17h37
  5. résultat de " select count "
    Par marie253 dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/06/2004, 12h07

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