#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