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

Requêtes MySQL Discussion :

Problème sous-requête MAX et COUNT


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Inscrit en
    Septembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2007
    Messages : 41
    Points : 35
    Points
    35
    Par défaut Problème sous-requête MAX et COUNT
    Bonjour.
    Ce que je cherche à faire parait simple et pourtant...

    Structure de ma table : "appel"
    idAppel / timeAppel
    1 / 1278190830
    2 / 1278190890
    3 / 1278194830

    Requete Sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT MAX(heure) 
    FROM (
      SELECT COUNT(timeAppel) AS heure 
      FROM appel 
      WHERE timeAppel BETWEEN '1278190820' AND '1278190900' 
    ) maxNb
    Ce que je cherche à faire
    - compter le nombre de ligne(s) dont la valeur "timeAppel" est comprise entre "1278190820" et "1278190900" (ici, le résultat = 2)
    - obtenir la valeur maximale de la requête ci-dessus (donc 2)

    Précisions
    A première vue, aucun intérêt de rechercher la valeur maximale puisqu'on l'obtient dans la première requête. En fait, c'est utile pour moi.
    Je fais des statistiques pour connaitre le nombre d'appels traités chaque heure et ce, chaque jour de la semaine. Et pour chaque jour, je cherche à savoir à quelle heure j'ai comptabilisé le maximum d'appels de la journée.

    DONC, la sous-requête qui contient le COUNT comptabilise le nombre d'appels par heure et la requête qui contient MAX est sensée retourner la valeur la plus élevée de la sous-requête...

    Et bien, tel que je l'ai écrit, ça ne fonctionne pas.

    Help s'il vous plait

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Ta requête me semble bonne...

    Quel résultat obtiens-tu pour la requête totale ?
    Quel résultat obtiens-tu pour la requête qui fait le count ?
    Quel est ton SGBD ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Inscrit en
    Septembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2007
    Messages : 41
    Points : 35
    Points
    35
    Par défaut
    Quand je fais un "mysql_fetch_array" de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT heure, MAX(heure) AS maximum 
    FROM (
      SELECT COUNT(timeAppel) AS heure 
      FROM appel 
      WHERE timeAppel BETWEEN '$D' AND '$F' ) maxNb
    j'obtiens :

    $rq['maximum'] VIDE
    $rq['heure'] = l'horaire correspondant

    Et bien entendu, ce qui m'intéresse est de récupérer la variable $rq['maximum']...

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    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 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    A tout les coups c'est du Pur MySQL qui doit connement considérer que NULL est max !

    Bef, changer pour un SGBDR moins con !

    A +

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Inscrit en
    Septembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2007
    Messages : 41
    Points : 35
    Points
    35
    Par défaut
    oui, c'est du mysql...

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    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 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    Ajoutez un filtre pour éliminer les NULL dans la colonne heure !

    A +

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par grafistolage Voir le message
    DONC, la sous-requête qui contient le COUNT comptabilise le nombre d'appels par heure et la requête qui contient MAX est sensée retourner la valeur la plus élevée de la sous-requête...

    Et bien, tel que je l'ai écrit, ça ne fonctionne pas.

    Help s'il vous plait
    Dans la mesure où il n'y a pas de GROUP BY, le SELECT count(...) de la sous-requête va renvoyer une seule valeur. Or, chercher le maximum dans une seule valeur ne sert à rien. Il y a donc un problème de logique indépendamment que ce soit mysql ou pas.

    Et à quoi correspond cette colonne timeAppel, c'est un timestamp avec une résolution d'une seconde?

Discussions similaires

  1. 2 tables, sous-requête, Max : je ne sais pas quoi utiliser
    Par Dr_shaman dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2008, 17h34
  2. [Requête]Problème avec requête max
    Par vcattin dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/03/2007, 15h49
  3. Sous requête MAX
    Par Erakis dans le forum Requêtes
    Réponses: 7
    Dernier message: 01/08/2006, 20h56
  4. Problème Sous-Requête
    Par STEF_1 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/01/2006, 13h12
  5. problème sous-requête SQL et order by
    Par aguest dans le forum Requêtes
    Réponses: 10
    Dernier message: 26/12/2005, 23h57

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