У меня есть данные об аренде велосипедов, и я сгруппировал их по количеству использований в день, используя следующий код в postgresql:
SELECT date_trunc('day', rental_date) FROM rentalinfo;
SELECT COUNT(date_trunc('day', rental_date)) as counted_leads,
date_trunc('day', rental_date) as count_date
FROM rentalinfo
GROUP BY date_trunc('day', rental_date)
ORDER BY date_trunc('day', rental_date) ASC;
результат дает столбец под названием counted_leads, который содержит количество прокатов в день. Я хочу сделать запрос, в котором я могу извлечь и суммировать количество арендованных автомобилей в выходные и будние дни отдельно. Я пробовал в будние дни:
SELECT SUM(counted_leads) AS sum_date WHERE count_date NOT IN ('2021-12-04',..)
но я получаю сообщение об ошибке «ОШИБКА: синтаксическая ошибка в или рядом с «ВЫБРАТЬ».
Как я могу это исправить, пожалуйста?
Вы также должны избегать проверки дат жесткого кода, чтобы узнать, принадлежит ли день выходным или нет. Есть функции для проверки.
Где твой пункт from?
Используйте extract(dow ...)
в предложении where, чтобы отфильтровать все строки рабочих дней (или выходных) и подсчитать их:
select count(*) as weekdays
from rentalinfo
where extract(dow from rental_date) in (1, 2, 3, 4, 5)
Или используйте условную агрегацию:
select count(case when extract(dow from rental_date) in (1, 2, 3, 4, 5) then 1 end) as weekdays
, count(case when extract(dow from rental_date) in (0, 6) then 1 end) as weekends
from rentalinfo
разве не должно быть 2,3,4,5,6 для будней и 1,7 для выходных? Спасибо.
dow
возвращает воскресенье = 0, а суббота = 6. Я думаю, что isodow
использует от 1 до 7.
Почти невозможно предоставить подробную справку, не зная ваших входных данных, структуры таблицы и ожидаемого результата. Последний запрос, который вы упомянули, неверен из-за отсутствия FROM.