Mysql : avg(min()) ?

12 réponses
AuteurMessage

Zalex14
Modérateur

Photo de Zalex14

Inscrit le : 09/05/2005

# Le 17/09/2008 à 14:09

Je cherche à obtenir la moyenne des valeurs minimales d'un champs avec mysql.

une requête de ce type :

Select AVG(MIN(madate)) as moyenne, numuser
FROM matable
group by numuser

J'ai une erreur : "Utilisation invalide de GROUP".
Je vois pas bien où est l'erreur ?

Une idée ?

Mieux vaut s'attendre au prévisible que d'être surpris par l'inattendu.

dob
Modérateur

Photo de dob

Inscrit le : 10/05/2005

# Le 17/09/2008 à 14:12

Bah tu peux pas combiner AVG et MIN sur la même requête puisque tu es sur le même lot de valeurs (ça te fait une moyenne sur 1 seul élément et ça ne sert à rien)

Il faut forcément passer par une requête intermédiaire (ou sous requête si ça marche)

Julien TartarinOuvrir dans une nouvelle fenetre
Founder & CEO @ Mailjet.comOuvrir dans une nouvelle fenetre

Rano
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 17/09/2008 à 14:12

Au mieux, si ca marche, ca te donnera seulement le MIN. Vu que tu group par numuser, ça récupérera le min par numuser, et la moyenne du min par numuser, donc la moyenne d'une seule valeur.

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

MathieuC
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 17/09/2008 à 14:13

A mon avis faut le faire en deux passes :

Soit tu fais une table temps qui listera tes valeurs mini, et dedans tu selectionne la moyenne

Soit tu recupere toutes tes valeurs mini et tu fais la moyenne en PHP

J'avais eu un probleme similaire une fois, et je n'avais rien trouvé pour le faire en une seule requete.

A priori, une table temporaire en memoire est ultra rapide, et ca evite le transfert des donnees entre ton serveur MySQL et Web

Zalex14
Modérateur

Photo de Zalex14

Inscrit le : 09/05/2005

# Le 17/09/2008 à 14:21

Ok, merci bien
Je vais passer par une table temporaire

Mieux vaut s'attendre au prévisible que d'être surpris par l'inattendu.

Bool
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 17/09/2008 à 15:47

(et les requêtes imbriquées, c'est pratique aussi)

Google is watching you.

Julgates
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 17/09/2008 à 18:15

C'est clair

select AVG(Select MIN(madate) as moyenne, numuser
FROM matable
group by numuser)

Beyoung InteractiveOuvrir dans une nouvelle fenetre - Consultant web

Rano
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 17/09/2008 à 18:34

sur de ton coup julgates ?

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

dob
Modérateur

Photo de dob

Inscrit le : 10/05/2005

# Le 17/09/2008 à 18:54

+1 Rano

Julien TartarinOuvrir dans une nouvelle fenetre
Founder & CEO @ Mailjet.comOuvrir dans une nouvelle fenetre

Bool
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 17/09/2008 à 19:40

Ce serait plutôt un truc du genre :

select avg( minValue ) as moyenne
from ( select min( tonChamp ) as minValue
from taTable
group by idUser );


Mais l'idée est la même.

Google is watching you.

Julgates
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 17/09/2008 à 22:26

Nan ça peut pas marcher car ya deux champs dans le sous select, mais vous aurez compris...

Beyoung InteractiveOuvrir dans une nouvelle fenetre - Consultant web

Rano
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 17/09/2008 à 22:29

ba oui, mais c'est mieux de ne pas faire d'erreur quand on fait son malin

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Julgates
Administrateur

Photo de Julgates

Inscrit le : 09/03/2005

# Le 17/09/2008 à 22:30

Promis la prochaine fois je réponds plus

Beyoung InteractiveOuvrir dans une nouvelle fenetre - Consultant web

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.