Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lorsque vous créez des requêtes agrégées, les outils du Concepteur de requêtes et de vues (Visual Database Tools) effectuent certaines hypothèses afin qu’elles puissent construire une requête valide. Par exemple, si vous créez une requête d’agrégation et marquez une colonne de données pour la sortie, le Concepteur de requêtes et de vues effectue automatiquement la partie colonne de la GROUP BY clause afin de ne pas tenter par inadvertance d’afficher le contenu d’une ligne individuelle dans un résumé.
Utiliser le groupe par
Le Concepteur de requêtes et de vues utilise les instructions suivantes pour l’utilisation des colonnes :
Lorsque vous choisissez l’option Group By ou ajoutez une fonction d’agrégation à une requête, toutes les colonnes marquées pour la sortie ou utilisées pour le tri sont automatiquement ajoutées à la
GROUP BYclause. Les colonnes ne sont pas automatiquement ajoutées à laGROUP BYclause si elles font déjà partie d’une fonction d’agrégation.Si vous ne souhaitez pas qu’une colonne particulière fait partie de la
GROUP BYclause, vous devez la modifier manuellement en sélectionnant une autre option dans la colonne Group By du volet Critères. Toutefois, le Concepteur de requêtes et de vues n’empêche pas de choisir une option qui peut entraîner une requête qui ne s’exécute pas.Si vous ajoutez manuellement une colonne de sortie de requête à une fonction d’agrégation dans le volet Critères ou SQL, le Concepteur de requêtes et de vues ne supprime pas automatiquement d’autres colonnes de sortie de la requête. Par conséquent, vous devez supprimer les colonnes restantes de la sortie de requête ou les faire partie de la
GROUP BYclause ou d’une fonction d’agrégation.
Lorsque vous entrez une condition de recherche dans la colonne Filtrer du volet Critères, le Concepteur de requêtes et de vues suit les règles suivantes :
Si la colonne Group By de la grille n’est pas affichée (car vous n’avez pas encore spécifié de requête d’agrégation), la condition de recherche est placée dans la
WHEREclause.Si vous êtes déjà dans une requête d’agrégation et que vous avez sélectionné l’option Where dans la colonne Group By , la condition de recherche est placée dans la
WHEREclause.Si la colonne Group By contient une valeur autre que Where, la condition de recherche est placée dans la
HAVINGclause.
Utiliser les clauses HAVING et WHERE
Les principes suivants décrivent comment vous pouvez référencer des colonnes dans une requête d’agrégation dans des conditions de recherche. En général, vous pouvez utiliser une colonne dans une condition de recherche pour filtrer les lignes qui doivent être résumées (une WHERE clause) ou déterminer les résultats groupés qui apparaissent dans la sortie finale (une HAVING clause).
Les colonnes de données individuelles peuvent apparaître dans la ou
HAVINGlaWHEREclause, selon la façon dont elles sont utilisées ailleurs dans la requête.WHEREles clauses sont utilisées pour sélectionner un sous-ensemble de lignes pour résumer et regrouper et sont donc appliquées avant l’opération d’un regroupement. Par conséquent, vous pouvez utiliser une colonne de données dans uneWHEREclause même si elle ne fait pas partie de laGROUP BYclause ou contenue dans une fonction d’agrégation. Par exemple, l’instruction suivante sélectionne tous les titres qui coûtent plus de 10,00 $ et moyenne le prix :SELECT AVG(price) FROM titles WHERE price > 10;Si vous créez une condition de recherche qui implique une colonne également utilisée dans une clause ou une
GROUP BYfonction d’agrégation, la condition de recherche peut apparaître sous la forme d’uneWHEREclause ou d’uneHAVINGclause. Vous pouvez décider quel moment vous créez la condition. Par exemple, l’instruction suivante crée un prix moyen pour les titres de chaque éditeur, puis affiche la moyenne pour les éditeurs dans lesquels le prix moyen est supérieur à 10,00 $ :SELECT pub_id, AVG(price) FROM titles GROUP BY pub_id HAVING (AVG(price) > 10);Si vous utilisez une fonction d’agrégation dans une condition de recherche, la condition implique un résumé et doit donc faire partie de la
HAVINGclause.