Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les fonctions a utiliser dans le select

Sujet résolu
    22 septembre 2018 à 18:27:33

    Bonjour, je n'arrive pas a comprendre pourquoi on ne peut pas utiliser des fonction tels que MAX(), MIN(), AVG() hors d'un select 

    et quelle est la liste de ces fonctions qui ne s'utilisent que dans le select ? 

    merci :)

    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2018 à 19:21:06

      Bonjour,

      Mrfantastic1 a écrit:

      on ne peut pas utiliser des fonction tels que MAX(), MIN(), AVG() hors d'un select

      C'est faux ... On peut tout à fait utiliser les fonctions d'agrégats dans des clause HAVING, qui est un peu l'équivalent du WHERE pour les agrégats ...

      Genre :

      -- Liste des pseudos pris par plus que un joueur
      SELECT pseudo
      FROM joueur
      GROUP BY pseudo
      HAVING COUNT(*) > 1

      https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html

      Les fonctions d'agrégat.

      -
      Edité par Benzouye 22 septembre 2018 à 19:22:09

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        23 septembre 2018 à 19:44:37

        prenons mon exemple, pourquoi je peux pas utiliser ma fonction MAX() afin de selectionner le plus grand ? je dois donc passer par un select intermediaire

        -
        Edité par Mrfantastic1 23 septembre 2018 à 19:46:07

        • Partager sur Facebook
        • Partager sur Twitter
          24 septembre 2018 à 9:32:46

          Mrfantastic1 a écrit:

          pourquoi je peux pas utiliser ma fonction MAX() afin de selectionner le plus grand

          SQL ne peut pas calculer le maximum pour chaque ligne ...

          Dans ton exemple tu dois d'abord déterminer la quantité maximale sur toute la table avant de pouvoir la comparer à la quantité de chaque ligne ... pas le choix, il faut une sous-requête (ce que tu appelles "select intermédiaire") ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            24 septembre 2018 à 19:48:43

            Désole j'ai vraiment du mal avec cette notion, je sais maintenant qu'on doit utiliser les fonction d'agregation dans des having ou des select mais je n'arrive pas a comprendre pourquoi :(
            • Partager sur Facebook
            • Partager sur Twitter
              25 septembre 2018 à 9:00:42

              Les fonctions d'agrégat te permettent de faire des calculs (SUM, MIN, MAX, COUNT, etc.) sur les valeurs de colonnes pour un regroupement d'enregistrements (clause GROUP BY).

              Vouloir faire un agrégat dans une clause WHERE n'a pas de sens puisque cette clause est évaluée pour chaque enregistrement. Une fonction MAX dans un WHERE n'utiliserait donc que la valeur de l'enregistrement "en cours d'évaluation" ... sans intérêt ...

              La clause HAVING, combinée à une clause GROUP BY, te permet d'utiliser la fonction d'agrégat sur les regroupements, comme présenté dans l'exemple plus haut sur les joueurs ...

              Je te conseille un peu de lecture sur le sujet. Tu peux commencer par le cours MySQL de Taguan (cf. ma signature) et plus particulièrement :

              https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1966846-fonctions-dagregation

              https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1967834-regroupement

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                25 septembre 2018 à 19:05:06

                ok je comprends mieux 

                merci du temps consacré :=)

                • Partager sur Facebook
                • Partager sur Twitter

                Les fonctions a utiliser dans le select

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown