#python #sql #sqlite
#python #sql #sqlite
Вопрос:
Я использую sqlite3 в python, и у меня есть таблица со следующими столбцами:
идентификатор записи (int), имя пользователя (текст), местоположения (текст), типы (текст), занятость (int), time_added (дата-время), токен (текст) и (отменить).
У меня есть следующий запрос, в котором я выбираю данные из таблицы в зависимости от того, какова занятость, и добавленное время находится между 2 указанными временами ввода пользователем, который является start_date и end_date:
('''SELECT locations, types,
(SELECT COUNT (occupancy) FROM traffic WHERE undo = 0 AND occupancy = 1 AND types = ? AND time_added BETWEEN ? AND ?),
(SELECT COUNT (occupancy) FROM traffic WHERE undo = 0 AND occupancy = 2 AND types = ? AND time_added BETWEEN ? AND ?),
(SELECT COUNT (occupancy) FROM traffic WHERE undo = 0 AND occupancy = 3 AND types = ? AND time_added BETWEEN ? AND ?),
(SELECT COUNT (occupancy) FROM traffic WHERE undo = 0 AND occupancy = 4 AND types = ? AND time_added BETWEEN ? AND ?),
FROM traffic WHERE types = ? GROUP BY type''',
(vehicle, start_date, end_date, vehicle, start_date, end_date, vehicle, start_date, end_date, vehicle, start_date, end_date, vehicle)
Есть ли какой-нибудь способ сконденсировать это, чтобы мне не приходилось копировать и вставлять одно и то же несколько раз, просто чтобы изменить заполняемость? Я попытался использовать цикл for, но это ни к чему меня не привело.
Ваше здоровье!
Ответ №1:
Я уверен, что это может значительно упростить запрос:
SELECT type
SUM( occupancy = 1 ) as cnt_1,
SUM( occupancy = 2 ) as cnt_2,
SUM( occupancy = 3 ) as cnt_3,
SUM( occupancy = 4 ) as cnt_4
FROM traffic
WHERE undo = 0 AND
type = ? AND
time_added BETWEEN ? AND ?
GROUP BY type;
Однако я не уверен, что именно это имеет в виду ваш вопрос.
Комментарии:
1. Я думаю, что это именно тот метод, о котором я думал. Я думаю, что в основном это просто запрос, который мне нужно было упростить. Просто хотел дать контекст относительно того, что пытался сделать запрос. Я просто хотел найти способ сделать запрос намного аккуратнее.