Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1262 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MySQL : AVG() dans un WHERE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MySQL : AVG() dans un WHERE

n°2202218
vanquishV1​2
se coucher tard nuit
Posté le 08-09-2013 à 11:42:59  profilanswer
 

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...
mood
Publicité
Posté le 08-09-2013 à 11:42:59  profilanswer
 

n°2202224
flo850
moi je
Posté le 08-09-2013 à 13:46:23  profilanswer
 

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 :
  1. SELECT marque, id_produit
  2. FROM pwet
  3. WHERE couleur="rose" /*on filtre ce qu'on veut agréger*/
  4. GROUP BY marque,id_produit /*tous les champs non agrégés doivent apparaitre ici*/
  5. HAVING AVG(prix) BETWEEN 3 AND 10 /* on filtre après agregation*/


---------------

n°2202226
vanquishV1​2
se coucher tard nuit
Posté le 08-09-2013 à 15:48:32  profilanswer
 

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 ?


Message édité par vanquishV12 le 08-09-2013 à 15:48:50

---------------
Bha ouais mais bon, m'enfin quoi...
n°2202229
flo850
moi je
Posté le 08-09-2013 à 16:43:14  profilanswer
 

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.


---------------

n°2202311
rufo
Pas me confondre avec Lycos!
Posté le 09-09-2013 à 16:16:24  profilanswer
 

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.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2202330
vanquishV1​2
se coucher tard nuit
Posté le 09-09-2013 à 18:04:15  profilanswer
 

ok merci. L'un est plus lent que l'autre ?


---------------
Bha ouais mais bon, m'enfin quoi...
n°2202404
rufo
Pas me confondre avec Lycos!
Posté le 10-09-2013 à 09:43:54  profilanswer
 

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)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MySQL : AVG() dans un WHERE

 

Sujets relatifs
[MYSQL] Mes requêtes en file d'attenteProbleme Application JAVA Connexion DB MySQL (connector/J driver)
php problème tableau suite requête MySQL [résolu]image php mysql
[MySQL] Limite sur jointureFormulaire et date et MySQL
Au secours, requête SQL, sous requête, AVG and coProblème dans mon where...
condition exist dans le WHERE 
Plus de sujets relatifs à : MySQL : AVG() dans un WHERE


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR