Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[SQL] J'ai un doute

5 réponses
Avatar
Zouplaz
Bonjour, je suis assez nul en math et j'ai un problème à résoudre : j'ai
des biens immobiliers et pour chaque bien j'ai une ou plusieurs
cotations (prix).
Les cotations sont chronologiques et évoluent dans le temps (à la hausse
ou à la baisse, une cotation identique au jour j et au jour j-1 n'est
pas conservée dans la base).

Je souhaite calculer le prix moyen au mètre carré par mois
SELECT YEAR(cotations.created_at) AS grp_annee,
MONTH(cotations.created_at) AS grp_mois,
SUM(prix) / SUM(superficie) AS prix_moyen
FROM cotations, biens
WHERE cotations.bien_id = biens.id
GROUP BY grp_annee, grp_mois


Voila comment je m'y prends, les résultats obtenus semblent cohérents
mais je préfèrerait avoir confirmation...

Merci d'avance

5 réponses

Avatar
Jogo
Sur fr.comp.applications.sgbd, Zouplaz disait :

Je souhaite calculer le prix moyen au mètre carré par mois
SELECT YEAR(cotations.created_at) AS grp_annee,
MONTH(cotations.created_at) AS grp_mois,
SUM(prix) / SUM(superficie) AS prix_moyen
FROM cotations, biens
WHERE cotations.bien_id = biens.id
GROUP BY grp_annee, grp_mois



Ce n'est pas tout à fait juste. Prenons un exemple simple :
- 125 m² à 250 000 euros
- 40 m² à 40 000 euros.
Ta « moyenne » donne : 290 000 / 165 = 1 757.57.
La vrai moyenne, c'est celle des prix au m², cad :
(2 000 + 1 000) / 2 = 1 500.

En fait ta méthode sur-représente les grandes surfaces.

Il faut donc utiliser : AVG(prix/surface) AS prix_moyen

--
Enfin, si vous pouviez me donner des détails sur ces petites choses qui
agrémentent la vie de tous les jours sur le Net, ça m'intéresse.
Si tu es blonde à forte poit .. heu non la je m'égare ..
-+-TIB in <http://www.le-gnu.net&gt; : Si mamelle s'y met... -+-
Avatar
Zouplaz
le 10/05/2007 17:21, Jogo nous a dit:


Il faut donc utiliser : AVG(prix/surface) AS prix_moyen




Merci bien !
Avatar
P'tit Marcel
Hello,


Jogo a écrit :
La vrai moyenne, c'est celle des prix au m², cad :
(2 000 + 1 000) / 2 = 1 500.



en statistique descriptive, on utilise plutôt la moyenne pondérée. Dans
ce cas précis, il s'agit de la moyenne des prix au m2 pondérée par les
superficies. voir fr.wikipedia.org/wiki/Moyenne_pond%C3%A9r%C3%A9e

prix moyen pondéré = sum (montant) / sum (superficie)

ce qui revient au calcul initial de Zouplaz.

En pratique, si on demande à chaque m2 à quel prix il a été vendu, la
moyenne de ces prix correspondra au prix moyen pondéré.


Il faut donc utiliser : AVG(prix/surface) AS prix_moyen



ce chiffre correspond à la moyenne directe des prix moyens. le problème
avec ce calcul, c'est qu'il est décorrelé de la performance globale
(cette moyenne peut s'améliorer alors que le marché baisse).


De: Zouplaz
Les cotations sont chronologiques et évoluent dans le temps (à la
hausse ou à la baisse, une cotation identique au jour j et au jour j-1
n'est pas conservée dans la base).



donc on ne peut pas calculer simplement une moyenne avec cette table :-(

Prenons par exemple d'un bien qui valait 100¤ du 1 au 30 mars et 120¤ le
31 mars. tu calculeras une moyenne de 110¤ alors que la moyenne des prix
sur la période est plutôt: (100*30 + 120)/31 = 100,65¤


eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
Avatar
Zouplaz
le 10/05/2007 23:05, P'tit Marcel nous a dit:

en statistique descriptive, on utilise plutôt la moyenne pondérée. Dans
ce cas précis, il s'agit de la moyenne des prix au m2 pondérée par les
superficies. voir fr.wikipedia.org/wiki/Moyenne_pond%C3%A9r%C3%A9e

prix moyen pondéré = sum (montant) / sum (superficie)

ce qui revient au calcul initial de Zouplaz.



Hey ! Alors c'était pas faux... J'en suis surpris !


En pratique, si on demande à chaque m2 à quel prix il a été vendu, la
moyenne de ces prix correspondra au prix moyen pondéré.


De: Zouplaz
> Les cotations sont chronologiques et évoluent dans le temps (à la
> hausse ou à la baisse, une cotation identique au jour j et au jour j-1
> n'est pas conservée dans la base).

donc on ne peut pas calculer simplement une moyenne avec cette table :-(




Mais ça peut s'arranger, jusqu'à présent j'ai conservé chaque cotation
,même identique, en me disant que ça avait sûrement un intérêt mais asna
savoir lequel. C'est dans un soucis d'optimisation que j'envisage de
supprimer les doublons...

Prenons par exemple d'un bien qui valait 100¤ du 1 au 30 mars et 120¤ le
31 mars. tu calculeras une moyenne de 110¤ alors que la moyenne des prix
sur la période est plutôt: (100*30 + 120)/31 = 100,65¤




Donc si je devrait revenir à la situation de départ, avec une cotation
chaque jour et AVG(prix/surface) AS prix_moyen comme mode de calcul ?
Avatar
P'tit Marcel
Zouplaz a écrit :
Mais ça peut s'arranger, jusqu'à présent j'ai conservé chaque cotation
,même identique, en me disant que ça avait sûrement un intérêt mais asna
savoir lequel. C'est dans un soucis d'optimisation que j'envisage de
supprimer les doublons...

Donc si je devrait revenir à la situation de départ, avec une cotation
chaque jour et AVG(prix/surface) AS prix_moyen comme mode de calcul ?




plutôt SUM(prix) / SUM(superficie)

pour éviter les doublons, il faudrait un champ supplémentaire qui donne
le nombre de jours de validité de la cotation. Dans ce cas, la moyenne
pondérée sur la période serait :

plutôt SUM(prix * jours) / SUM(superficie * jours)

dans notre exemple d'un bien de 1m2 qui valait 100¤ du 1 au 30 mars et
120¤ le 31 mars, on aurait donc :
(100*30 + 120*1) / (1*30 + 1*1) = 100,65¤


a+
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/