2016-05-24 34 views
1

Я пытаюсь выполнить когортный анализ и сравнить среднее количество арендных ставок на основе первого года аренды арендатора (= год, когда арендатор арендовал первый раз). В основном, я задаю вопрос: сохраняем ли мы арендаторов, чей первый год аренды был до 2013 года, чем арендаторы, чей первый год был 2015?PostgreSQL - ОШИБКА: столбец не существует Состояние SQL: 42703

Вот мой код:

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; 

Сообщение об ошибке я получаю:

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 

Любая помощь очень ценится.

+1

я не вижу часть ошибок в вашем запросе вы публикуемый ... правильный синтаксис должен быть 'И извлечь (год от b1.created_at)' – cableload

+0

Вы уверены, что это тот же самый запрос? Сообщение об ошибке говорит LINE 10? – FirebladeDan

+0

Извините, ребята, добавили правильное сообщение об ошибке – DBE7

ответ

3
SELECT renter_id, 
     Count(trip_finish) AS number_of_trips 
FROM (
     SELECT renter_id, 
       trip_finish, 
       Min(Date_part('year', created_at)) AS first_rental_year 
     FROM bookings 
     WHERE state IN ('approved', 'aboard', 'ashore', 'concluded', 'disputed') 
    ) T 
WHERE first_rental_year = 2013 
GROUP BY renter_id 
ORDER BY renter_id ; 
+0

Это выглядит правильно, все, что ему нужно, это T. first_rental_year, T.renter ?? Правильный Хуан или я полна ши? – FirebladeDan

+1

Проблема в том, что вы не можете использовать псевдоним 'first_rental_year' на том, где, потому что в то время псевдоним не существует. Таким образом, вы создаете псевдоним внутри подзапроса и используете его снаружи. Вы также можете изменить псевдоним и использовать функцию 'Min (Date_part ('year', created_at)) = 2013' –

+0

ОШИБКА: столбец« t.first_rental_year »должен появиться в предложении GROUP BY или использоваться в агрегированной функции LINE 1: SELECT * ^ ********** Ошибка ********** ОШИБКА: столбец «t.first_rental_year» должен появиться в предложении GROUP BY или использоваться в агрегированная функция Состояние SQL: 42803 Персонаж: 8 – DBE7

Смежные вопросы