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 :

[Firebird 1.5] Nombre d'occurences de chaque Nom ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut [Firebird 1.5] Nombre d'occurences de chaque Nom ?
    Soit une table clients avec Nom, Prenom, etc ...

    Dans cette table j'ai plusieurs fois le nom DUPONT, plusieurs fois le nom DURAND etc ...

    J'aimerais récupérer le nombre d'occurrences de chaque nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    NOM       COUNT
    --------- ----------
    DUPONT    12
    DURAND    8
    RARE      1
    que dois-je faire comme requête ?

    merci d'avance

  2. #2
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Nibbler
    Soit une table clients avec Nom, Prenom, etc ...

    Dans cette table j'ai plusieurs fois le nom DUPONT, plusieurs fois le nom DURAND etc ...

    J'aimerais récupérer le nombre d'occurrences de chaque nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    NOM       COUNT
    --------- ----------
    DUPONT    12
    DURAND    8
    RARE      1
    que dois-je faire comme requête ?

    merci d'avance
    Salut,
    Je dirais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT nom, COUNT(*) FROM clients GROUP BY nom;

  3. #3
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Merci

  4. #4
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Oups, petit detail ... maintenant comment je fais pour afficher que les noms qui sont présents plus de 10 fois ...

    la logique voudrait quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count(Nom), Nom from clients
    where count(Nom)>10
    group by Nom
    order by count(Nom)
    mais on ne peut pas avoir de WHERE et de GROUP BY ensemble ...

  5. #5
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par Nibbler
    Oups, petit detail ... maintenant comment je fais pour afficher que les noms qui sont présents plus de 10 fois ...

    la logique voudrait quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count(Nom), Nom from clients
    where count(Nom)>10
    group by Nom
    order by count(Nom)
    mais on ne peut pas avoir de WHERE et de GROUP BY ensemble ...
    Peut-être en ajoutant un HAVING count(nom) > 10 après le GROUP BY Nom. Mais je ne suis pas familier de cette syntaxe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT nom, COUNT(*) 
    FROM clients 
    GROUP BY nom
    HAVING COUNT(*) > 10;

  6. #6
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Re-bingo ! C'est ça, Merci

  7. #7
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Allez on complique encore un peu

    Maintenant je veux récupérer combien de noms apparaissent plus de 10 fois dans ma table ... sauf erreur de ma part ça devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select count(*) from
    (
    SELECT nom, COUNT(*) 
    FROM clients 
    GROUP BY nom
    HAVING COUNT(*) > 10
    )
    ou, si on renomme le résultat de la table imbriquée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select count(*) from
    (
    SELECT nom, COUNT(*) 
    FROM clients 
    GROUP BY nom
    HAVING COUNT(*) > 10
    ) MaTableRes

    mais aucune des deux syntaxes ne marche

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Citation Envoyé par Nibbler
    mais aucune des deux syntaxes ne marche
    Qu'entends-tu par là ? Message d'erreur ou résultat incorrect ?

    Quel est ton SGBD (et sa version) STP (cf les CONSEILS... à lire AVANT de POSTER)
    "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

  9. #9
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Par défaut
    Oups désolé , mon SGBD est Firebird 1.5 (1.5.2.4731)

    et l'erreur est :

    Statement #1:
    Dynamic SQL Error
    SQL error code = -104
    Token unknown - line 3, char 1
    select

    C'est comme s'il n'acceptait pas un deuxième SELECT dans le FROM du premier SELECT ?

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut Correction ?
    Et que dit le moteur SQL sur l'instruction corrigée ci-dessous qui me paraît plus cohérente ?

    select * from
    (
    SELECT nom, COUNT(nom)
    FROM clients
    GROUP BY nom
    HAVING COUNT(nom) > 10
    ) MaTableRes

    MaTableRes devrait, si j'ai bien compris, comporter les colonnes nom et count correspondant au select imbriqué.


Discussions similaires

  1. Réponses: 26
    Dernier message: 06/06/2006, 23h15
  2. Réponses: 28
    Dernier message: 22/09/2005, 11h57
  3. Nombre d'occurence d'un motif par ligne
    Par anne-so dans le forum Langage
    Réponses: 8
    Dernier message: 22/08/2005, 19h36
  4. Réponses: 8
    Dernier message: 18/01/2005, 10h58
  5. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03

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