Как создать фильтр в базе данных SQLite для нескольких таблиц? - PullRequest
0 голосов
/ 03 августа 2020

Я ищу способ создать ряд фильтров для нескольких таблиц в моей базе данных SQL. Две таблицы, из которых мне нужны данные, - это Order и OrderDetails. Таблица Order выглядит так:

------------------------------------
| OrderID | CustomerID | OrderDate | 
------------------------------------

Таблица OrderDetails выглядит так:

----------------------------------
| OrderID | ProductID | Quantity | 
----------------------------------

Я хочу сделать так, чтобы она подсчитывала количество экземпляров конкретный OrderID появляется в течение одного дня. Например, он выберет OrderID в Order, а затем сопоставит его с OrderID s в OrderDetails, подсчитав, сколько раз он появляется в OrderDetails.

-----------------------------------------------------------
| OrderID | CustomerID | OrderDate | ProductID | Quantity |
-----------------------------------------------------------

Код, который я использовал, находится ниже:

# Execute SQL Query (number of orders made on a particular day entered by a user)
cursor.execute("""
SELECT 'order.*', count('orderdetails.orderid') as 'NumberOfOrders'        
from 'order'
left join 'order'
on ('order.orderid' = 'orderdetais.orderid')
group by
    'order.orderid'
""")
print(cursor.fetchall())

Кроме того, текущий вывод, который я получаю, это когда я должен получить 3:

[('order.*', 830)]

1 Ответ

0 голосов
/ 03 августа 2020

Ваша непосредственная проблема в том, что вы злоупотребляете одинарными кавычками. Если вам нужно заключить в кавычки идентификаторы (имя таблицы, имя столбца и т.п.), тогда вы должны использовать двойные кавычки в SQLite (на самом деле это стандарт SQL). А такие выражения, как order.*, вообще не следует заключать в кавычки. Вы также самостоятельно присоединяетесь к таблице заказов, хотя вы, вероятно, хотите вывести детали заказа.

Кажется, вы хотите:

select
    o.orderID,
    o.customerID,
    o.orderDate,
    count(*) number_of_orders
from "order" o
left join orderdetails od on od.orderid = o.orderid
group by o.orderID, o.customerID, o.orderDate

order - ключевое слово языка, поэтому я сделал процитируйте это - эту таблицу лучше назвать orders, чтобы избежать противоречивого имени. Другие идентификаторы здесь указывать не нужно.

Поскольку все, что вам нужно от orderdetails, - это счетчик, вы также можете использовать подзапрос вместо агрегирования:

select 
    o.*,
    (select count(*) from orderdetails od where od.orderid = o.oderid) number_of_orders
from "order" o
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...