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 :

[SQL Server] select max d'un count ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 10
    Points
    10
    Par défaut [SQL Server] select max d'un count ?
    bonsoir,

    je cherche à faire un max d'un cout

    SGBDR : SQL server

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select id, count(*)
    From ligne_commande
    group by id
    having count(*) > select ...
    c'est quelque chose de ce style... mais j'arrive pas à finir...


    merci !

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    La requête suivante te ramène le nombre de lignes par id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id, count(*)
      FROM ligne_commande
     GROUP BY id
    Si tu veux le MAX du nombre de lignes, tu peux l'obtenir ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(COUNT(*))
      FROM ligne_commande
     GROUP BY id
    Cette précédente requête ne te ramènera qu'une ligne (si tu as au moins une ligne avec des données valides !), tu peux donc écrire sans craintes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT id, count(*)
      FROM ligne_commande
    HAVING count(*) = (SELECT MAX(COUNT(*))
                         FROM ligne_commande
                        GROUP BY id)
     GROUP BY id
    cette requête te ramenera le ou les id qui regroupent le plus grand nombre de lignes de ta table ligne_commande

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    salut !

    dsler pour le retard mais il me semble que le max(count..) n'est pas autorisé avec SQL Server... On peut avec oracle par contre ! quel est la solution avec sql server ? merci !

  4. #4
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Citation Envoyé par chess75
    salut !

    dsler pour le retard mais il me semble que le max(count..) n'est pas autorisé avec SQL Server... On peut avec oracle par contre ! quel est la solution avec sql server ? merci !
    Avec une sous-requete ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select max(nb)
    from (SELECT id, count(*) nb
          FROM ligne_commande
          GROUP BY id)
    Bloon

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Points : 14
    Points
    14
    Par défaut max d'un cout
    bonjour

    je viens de tester cela ne marche pas non plus sur psql il renvoit l'erreur suivante :

    "ERROR: aggregate function calls cannot be nested"

    merci

  6. #6
    Membre habitué Avatar de lou-03
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 156
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Je sais bien que ce post date de plus d'un an, mais dans les résultats Google c'est le premier lien alors je pense que la solution ne sera pas de trop ^^.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id, count(*)
    FROM ligne_commande
    GROUP BY id
    HAVING count(*) >= ALL (SELECT count(*)
                        FROM ligne_commande
                        GROUP BY id)
    Ta requête principale retournera la valeur qui est supérieure ou égale à toutes les valeurs de la sous requête.

    En espérant que ça aidera quelqu'un

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2011
    Messages : 13
    Points : 17
    Points
    17
    Par défaut
    MOI perso ça m'a aidé beaucoup , merci encore

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Ca marche super, et ça nous a bien aidé pour notre TD de BDD, merci

  9. #9
    Candidat au Club
    Homme Profil pro
    Apprentissage en Developpement Web
    Inscrit en
    Mai 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Apprentissage en Developpement Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Félicitation
    Vraiment merci pour cette requête ...

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Xo Voir le message
    ...
    Si tu veux le MAX du nombre de lignes, tu peux l'obtenir ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(COUNT(*))
      FROM ligne_commande
     GROUP BY id
    Cela n'existe pas en SQL c'est une fantaisie de certains SGBDR... En effet le GROUP BY s'appliquant à toutes les opérations d'agrégation, LE MAX d'un COUNT donnerait le COUNT ce qui n'a aucun intérêt.

    On peut faire cela soit par une sous requête, soit à l'aide d'un fenêtrage.

    A +

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Bloon Voir le message
    Avec une sous-requete ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select max(nb)
    from (SELECT id, count(*) nb
          FROM ligne_commande
          GROUP BY id)
    Bloon
    Cette requête est incorrecte. La norme SQL exiqge que toute ttable, fut-elle dérivée par une sous requête, ait son propre nom. Il suffit donc de rajouter un alias de table poiur que cette re


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select max(nb)
    from (SELECT id, count(*) nb
          FROM ligne_commande
          GROUP BY id) AS Ma_Table

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

Discussions similaires

  1. [SQL Server] SELECT TOP n FROM
    Par juniorAl dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/11/2009, 10h06
  2. [SQL Server] select max ne retourne pas la bonne valeur
    Par *alexandre* dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/09/2008, 14h49
  3. Réponses: 10
    Dernier message: 10/05/2006, 10h44
  4. Réponses: 16
    Dernier message: 14/04/2006, 18h38
  5. [SQL] requete select max
    Par kabikou dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 19/10/2005, 16h18

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