python - 如何在 SQLite 数据库中跨多个表创建过滤器?
问题描述
我正在寻找一种在我的 SQL 数据库中的几个表中创建多个过滤器的方法。我需要数据的 2 个表是Order
和OrderDetails
。Order
表格是这样的:
------------------------------------
| OrderID | CustomerID | OrderDate |
------------------------------------
OrderDetails
表格是这样的:
----------------------------------
| OrderID | ProductID | Quantity |
----------------------------------
我想让它计算特定 OrderID 在一天内弹出的实例数。例如,它将选择一个OrderID
inOrder
然后将其与OrderID
s in匹配OrderDetails
,计算它在 in 中弹出的次数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)]
解决方案
您的直接问题是您滥用单引号的使用。如果您需要引用标识符(表名、列名等),那么您应该在 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
推荐阅读
- python - 深度学习模型的验证准确率停留在 0.5,而训练准确率正在提高
- java - @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Id 和序列的问题
- google-cloud-firestore - Google FireStore - 班次计划或资源预订 - 如何查询
- php - 传递的变量在特定行中不起作用
- javascript - 当我切换菜单以关闭和调整窗口大小时,如何防止我的徽标消失?
- delphi - 如何声明仅存在于 Windows 8 上的外部函数,而不会使应用程序在 Windows 7 及更低版本上崩溃?
- python - python中任何数据的快速散列
- apache-kafka - 使用 Kafka Streams 从多个主题中累积事件
- machine-learning - 结构化数据的小型数据集的迁移学习
- javascript - 悬停时不显示下拉菜单