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 :

MAX(COUNT(...), problème à trouver la personne qui a le plus d'entrées


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut MAX(COUNT(...), problème à trouver la personne qui a le plus d'entrées
    Bonjour,

    Je sais que le MAX(COUNT()) est un problème récurrent ... j'ai trouvé un certain nombre de post qui en parle sur ce forum et ailleurs ... cependant cela ne m'a pas permis de résoudre mon problème ... ni même avec la FAQ SQL ...

    J'ai une table qui, pour simplifier, n'a que deux colonnes : nom (VARCHAR), timestamp (DATETIME). Un même nom peut être enregistré plusieurs fois dans la table.

    Dans un premier temps, je cherche le nombre de fois qu'est présent chacun des noms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   NOM,
             COUNT(TIMESTAMP)
    FROM     table
    WHERE    NOM IN (SELECT DISTINCT NOM
                     FROM   table)
    GROUP BY NOM
    Jusque là ça fonctionne ... maintenant j'aimerais faire un MAX() dans cette requête pour savoir lequel des noms a le plus d'entrées ... mais impossible à réaliser et je ne comprend pas pourquoi ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   NOM,
             MAX(COUNT(TIMESTAMP))
    FROM     table
    WHERE    NOM IN (SELECT DISTINCT NOM
                     FROM   table)
    GROUP BY NOM
    Pourriez vous m'éclairer ?

    D'avance merci.



    xenos

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(NOMBRE)
    FROM   (SELECT COUNT(ceque je veux)
            FROM ...) T
    essayez de nous donner vos vrai tables et non des pseudo tables !
    RESPECTEZ LA CHARTE DE POSTAGE :
    http://www.developpez.net/forums/ann....php?f=37&a=69

    A +

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Le problème est que le COUNT agit sur le regroupement par NOM et que le MAX agit sur le même regroupement.

    Pour obtenir le max, il n'y a pas besoin d'utiliser la fontion MAX, il suffit d'ordonner les résultats par COUNT descendant, et de prendre que 1 résultat : il s'agit alors du maximum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nom, COUNT(timestamp) as nb
    FROM `table`
    GROUP BY nom
    ORDER BY nb DESC
    LIMIT 1

  4. #4
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Merci SQLPro, jeremya. ça fonctionne maintenant !

    Je suis parti de ton idée jeremya de faire un DESC :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nom, COUNT( timestamp ) AS nb
    FROM table
    GROUP BY nom
    ORDER BY nb DESC
    LIMIT 1
    Citation Envoyé par SQLPro
    essayez de nous donner vos vrai tables et non des pseudo tables !
    RESPECTEZ LA CHARTE DE POSTAGE :
    En ce qui concerne le fait que j'aurais donné une pseudo table ... il n'en est rien ...

    J'ai nommé la colonne nom parce qu'elle contient des noms et timestamp parce qu'elle contient des timestamps, voilà tout ...

    Je n'ai fait que prendre deux colonnes sur l'ensemble, étant donné que l'on a besoin que ces deux colonnes pour résoudre le problème et que ça ne sert à rien d'encombrer inutilement le post ... mais ça je l'ai déjà dis ...

    Citation Envoyé par xenos
    J'ai une table qui, pour simplifier, n'a que deux colonnes : nom (VARCHAR), timestamp (DATETIME).
    Bon développement à tous.



    xenos

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    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 115
    Points : 28 493
    Points
    28 493
    Par défaut
    LIMIT n'appartient pas au langage SQL normalisé et ne sera pris en charge que par un nombre restreint de SGBD qui s'écartent de cette norme.

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

Discussions similaires

  1. [WD17] Problème avec un code qui ne marche plus
    Par devalender dans le forum WinDev
    Réponses: 2
    Dernier message: 14/02/2014, 13h57
  2. Problème: select max(count())
    Par zizou1989 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 14/05/2013, 17h31
  3. Réponses: 13
    Dernier message: 02/11/2011, 09h47
  4. Réponses: 4
    Dernier message: 01/08/2011, 12h24
  5. [XL-2003] Tableau: trouver la colonne qui a le plus de valeur
    Par deamonRav dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/04/2010, 10h58

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