Невозможно преобразовать функцию age в float с помощью Postgresql

#postgresql

#postgresql

Вопрос:

Я пытаюсь написать запрос для вывода среднего заработка за час, потраченный на разбиение по дням недели.

worker_table:-

session_id worker_id session_start session_end total_pay num_of_deliveries
7712 9347 2020-08-31 03:32:43 2020-08-31 05:53:43 46.72 3
1560 5645 2020-07-26 01:48:40 2020-07-26 04:48:40 65.32 4

Пока я могу извлечь день недели и возраст, но я не слишком уверен, как преобразовать возраст в числовой, чтобы я мог продолжить свой запрос. Когда я выполняю запрос ниже, возраст будет «02:21:00», но я хочу, чтобы это было число с плавающей запятой, чтобы я мог разделить total_pay на возраст. Спасибо.

 select extract(dow from session_start), age(session_end, session_start)
from worker_table 
 

Редактировать: если по какой-то причине таблица отображается неправильно. Пожалуйста, просмотрите мою таблицу здесь: https://pastebin.com/g8GvyWWR

Ответ №1:

Чтобы получить количество секунд из интервала, вы можете использовать extract epoch . В вашем случае вы могли бы сделать что-то вроде этого —

 select extract(epoch from age(session_end, session_start)) as session_length_in_seconds
from worker_table 
 

Тогда полный запрос может выглядеть примерно так —

 select 
    extract(dow from session_start), 
    avg(total_pay / (extract(epoch from age(session_end, session_start)) / 3600.0)) as avg_earnings_per_hour
from worker_table 
group by 1