MySQL : AVG() dans un WHERE - SQL/NoSQL - Programmation
Marsh Posté le 08-09-2013 à 13:46:23
Le AVG est une fonction d'agrégat, donc calculé après la phase de group by
donc il faut mettre ta condition dans le having
Mysql permet de faire d'utiliser des fonctions d'agrégat dans groupe by , ce qui est très sale
Code :
|
Marsh Posté le 08-09-2013 à 15:48:32
merci c'est au top.
"C'est très sal" c'est à dire ?
Dans ce cas pourquoi ne pas toujours utiliser having au lieu de where ?
Marsh Posté le 08-09-2013 à 16:43:14
c'est un group by implicite, donc il ya un côté magie noire faite en cachette
on utilise un where pour filtrer avant le group by, having by pour le faire après. Les deux ont un usage précis.
Marsh Posté le 09-09-2013 à 16:16:24
De façon un peu plus imagée, le WHERE permet de filtrer les enregistrements de la table ou des tables impliquées dans la requête, le HAVING permet de filtrer les résultats remontés par la requête dans le SELECT.
Marsh Posté le 09-09-2013 à 18:04:15
ok merci. L'un est plus lent que l'autre ?
Marsh Posté le 10-09-2013 à 09:43:54
ben faut d'abord faire le where pour limiter ce qui est remonté dans le SELECT. Par ailleurs, ça serait ballot de faire un filtrage dans le HAVING alors que tu peux le faire dans le WHERE. Pour l'aspect perfs, j'ai jamais testé pour comparer. C'est juste une question de logique. J'aurais tendance à dire que le HAVING est la pour faire des filtrage que tu peux pas faire avec le WHERE (ou alors faisable par un WHERE, comme une opération sur une agrégation genre AVG mais au travers d'une sous-requête ce qui là, peu faire baisser les perfs)...
Marsh Posté le 08-09-2013 à 11:42:59
Bonjour,
Je voudrais faire un truc du genre :
SELECT marque,produit WHERE AVG(prix) = (($prix_min + $prix_max)/2);
$prix_min correspond au prix minimal trouvé dans tous les résultats et $prix_max le plus élevé.
En gros je veux faire une requête pour trouver les produits qui ont le même prix moyen (je ferai un BETWEEN mais j'ai simplifié pour l'exemple).
Sauriez vous comment faire svp ?
Merci
---------------
Bha ouais mais bon, m'enfin quoi...