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 :

Requête sur MIN() et retour d'autres colonnes


Sujet :

Langage SQL

  1. #1
    Invité
    Invité(e)
    Par défaut Requête sur MIN() et retour d'autres colonnes
    Bonjour,

    Je me heurte à un problème et je n'arrive pas à en trouver la solution.
    J'ai une table contenant plusieurs colonnes : id, annee, mois, jour, temperature
    Je souhaite faire une requête me retournant la valeur min de la température et l'année de ce mini.
    J'ai écrit ma requête comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $resultat = mysqli_query($link,"SELECT annee, MIN(temperature) as mini where jour='".$jour."' and mois='".$mois."'");
    while ($row = mysqli_fetch_assoc($resultat)) {
    	$temp_mini = $row['mini'] ;
    	$annee = $row['annee'] ;
    }
    J'obtiens bien la température mini, mais l'année récupérée ne correspond pas (en fait l'année retournée est celle de la première ligne de ma table).

    Quelle est la solution à mon problème ?
    Merci d'avance.
    Dernière modification par Invité ; 16/07/2021 à 19h29. Motif: Coloration syntaxique [CODE=php] … [/CODE]

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Quelque chose me dit que tu utilises MySQL... car ta requête n'est pas correcte.
    Il manque la clause GROUP BY.

    N'importe quel autre SGBD auraient renvoyé une erreur, et MySQL renvoie n'importe quoi.

    Tatayo.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Effectivement, j'ai omis de dire que j'étais en MySql.
    Merci pour le retour, mais je ne vois pas la subtilité du GROUP BY. Je dois grouper sur quelle colonne ?

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Avec tout SGBD autre que MySQL/MariaDB, toutes les colonnes ne faisant pas l'objet d'un agrégat doivent être groupées

    Ainsi la requête ci-après est correcte

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select annee
         , truc
         , bidule
         , min(temperature)
         , avg(machin)
         , count(*)
    from ma_table
    group by annee
           , truc
           , bidule


    mais celle-ci ne l'est pas, car il manque le regroupement sur la colonne "bidule"

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select annee
         , truc
         , bidule
         , min(temperature)
         , avg(machin)
         , count(*)
    from ma_table
    group by annee
           , truc

  5. #5
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par chrismargab67 Voir le message
    Bonjour,

    Effectivement, j'ai omis de dire que j'étais en MySql.
    Merci pour le retour, mais je ne vois pas la subtilité du GROUP BY. Je dois grouper sur quelle colonne ?
    Bonjour,
    Pour la clause Group by, voir le cours de Laurent Audibert

    Autre problème du source montré : il n'y a pas de clause From ?

  6. #6
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par chrismargab67 Voir le message
    J'obtiens bien la température mini, mais l'année récupérée ne correspond pas (en fait l'année retournée est celle de la première ligne de ma table).

    Quelle est la solution à mon problème ?
    Il faut décomposer la requête :
    1 - quelle est la température minimale ?
    2 - quelle est l'année correspondant à cette température minimale ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    Autre problème du source montré : il n'y a pas de clause From ?
    Effectivement, j'ai oublié le FROM, mais ce n'était pas la cause du problème puisque j'ai réécrit le code dans le message, je n'ai pas fait de copier/coller du code original.

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

Discussions similaires

  1. Tri d'une requête sur une valeur ou une autre
    Par mims1664 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/08/2009, 17h40
  2. extraire dans une nouvelle colonne le min issu de 3 autres colonnes
    Par ibilliau dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/01/2009, 08h48
  3. Réponses: 6
    Dernier message: 04/11/2008, 22h35
  4. faire une requête sur une table d'un autre schéma
    Par kineton dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/04/2008, 15h08
  5. Requête sur deux tables et réponses en colonnes
    Par grandoc dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/12/2006, 12h49

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