Règle d'agrégation
Fermé
ygj
Messages postés
65
Date d'inscription
dimanche 1 février 2009
Statut
Membre
Dernière intervention
29 décembre 2021
-
22 juin 2020 à 01:14
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 26 juin 2020 à 09:18
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 26 juin 2020 à 09:18
A voir également:
- Règle d'agrégation
- Règle en cm sur téléphone - Guide
- Gmail regle de classement - Guide
- Regle excel - Guide
- Règle des 21 jours sav - Forum Matériel & Système
- Regle tarot 3 bouts meme pli - Forum Loisirs / Divertissements
2 réponses
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
25 juin 2020 à 16:11
25 juin 2020 à 16:11
Bonjour,
Pour faire très très simple.
Imagine la table suivante :
table Fruits
Type - Poids
Pomme - 100g
Pomme - 120g
Orange - 130g
Poire - 100g
Si tu demandes
SELECT avg(Poids) from fruits;
Tu auras la moyenne de tous les poids.
Si tu veux la moyenne des poids par fruit, tu fais :
SELECT avg(Poids) from fruits group by type;
et pour voir le type correspondant, il est plus clair de faire
SELECT type, avg(Poids) from fruits group by type;
Maintenant, imagine la requête suivante :
SELECT type, avg(Poids) from fruits;
et mets-toi à la place du moteur SQL : quel est ce "type" qu'on veut afficher ? La requête renvoie juste une valeur, la moyenne de l'ensemble, puisqu'on n'a pas de GROUP BY.
On comprend bien que quelque chose ne va pas.
Et bien c'est de ça que parle la phrase que tu cites.
Quand on utilise une fonction d'aggrégation (AVG, ici), toutes les colonnes que l'on demande DOIVENT faire partie de champs du GROUP BY (ou être elles-mêmes des fonctions d'agrégation, par exemple on pourrait imaginer de rajouter SUM(poids), MIN(poids), etc)
Xavier
Pour faire très très simple.
Imagine la table suivante :
table Fruits
Type - Poids
Pomme - 100g
Pomme - 120g
Orange - 130g
Poire - 100g
Si tu demandes
SELECT avg(Poids) from fruits;
Tu auras la moyenne de tous les poids.
Si tu veux la moyenne des poids par fruit, tu fais :
SELECT avg(Poids) from fruits group by type;
et pour voir le type correspondant, il est plus clair de faire
SELECT type, avg(Poids) from fruits group by type;
Maintenant, imagine la requête suivante :
SELECT type, avg(Poids) from fruits;
et mets-toi à la place du moteur SQL : quel est ce "type" qu'on veut afficher ? La requête renvoie juste une valeur, la moyenne de l'ensemble, puisqu'on n'a pas de GROUP BY.
On comprend bien que quelque chose ne va pas.
Et bien c'est de ça que parle la phrase que tu cites.
Quand on utilise une fonction d'aggrégation (AVG, ici), toutes les colonnes que l'on demande DOIVENT faire partie de champs du GROUP BY (ou être elles-mêmes des fonctions d'agrégation, par exemple on pourrait imaginer de rajouter SUM(poids), MIN(poids), etc)
Xavier
yg_be
Messages postés
22698
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 avril 2024
1 471
22 juin 2020 à 08:22
22 juin 2020 à 08:22
26 juin 2020 à 09:18
Et dans le cas où on ne voudrait pas avoir à renseigner dans le select des champs qui ne sont pas dans le group by, il suffit de modifier l'option SQL_MODE et y retirant le ONLY_FULL_GROUP_BY
en ligne de commande
Ou via phpmyadmin
PS: Pour rappel, lorsque l'on poste du code sur le forum ( même si ce n'est qu'une petite requête SQL..) merci d'utiliser les balises de code.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code