PostgreSQL - ERREUR: la colonne n'existe pas état SQL: 42703
Je suis en train de faire une analyse de cohorte et de comparer nombre moyen de location basé sur le locataire du premier loyer de l'année(= l'année où un locataire loué pour la première fois). En gros, je me suis poser la question: sommes-nous conserver les locataires dont la première année de la location d'été 2013 que les locataires dont la première année a été de 2015?
Voici mon code:
SELECT renter_id,
Min(Date_part('year', created_at)) AS first_rental_year,
( Count(trip_finish) ) AS number_of_trips
FROM bookings
WHERE state IN ( 'approved', 'aboard', 'ashore', 'concluded', 'disputed' )
AND first_rental_year = 2013
GROUP BY 1
ORDER BY 1;
Le message d'erreur que je reçois est:
ERROR: column "first_rental_year" does not exist
LINE 6: ... 'aboard', 'ashore', 'concluded', 'disputed') AND first_rent...
^
********** Error **********
ERROR: column "first_rental_year" does not exist
SQL state: 42703
Character: 208
Toute aide est très appréciée.
- je ne vois pas l'erreur une partie de votre requête vous avez posté... la syntaxe correcte devrait être
AND extract(year from b1.created_at)
- Êtes-vous sûr que c'est la même requête? Message d'erreur disant que la LIGNE 10?
- Désolé les gars, a ajouté le message d'erreur correct
- Le problème est que la colonne
first_rental_year
n'est pas dans votre table source. D'autres SQL les moteurs prennent en charge la syntaxeAND CALCULATED first_rental_year = 2013
, mais postgre ne l'est pas. Il est possible de réutiliser votre formule (AND Min(Date_part('year', created_at)) = 2013
) ou mieux, utiliser @Juan Carlos solution qui permet d'éviter cette redondance. Voir ce post pour plus d'info. - Je ne peux pas réutiliser ma formule, car elle dit que les fonctions d'agrégation ne sont pas autorisés dans la clause where
- j'avais appartiennent à la clause having mais j'irais avec @Juan Carlos
Vous devez vous connecter pour publier un commentaire.
first_rental_year
sur le où, car à ce moment l'alias n'existent pas. Ainsi, vous créez des alias à l'intérieur d'une sous-requête et de l'utiliser à l'extérieur. Vous pouvez également modifier les alias et utiliser la fonctionMin(Date_part('year', created_at)) = 2013