在sqlite中以变量和按月排序作为参数进行查询

yfwxisqw  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(223)

我需要一份关于指定月份所有订单的名、姓和总额的报告。该报告应进行分类,以便花费最多的客户位于顶部。
我可以在desc中查询列表,但是用户如何输入一个变量,然后为ech month创建一个案例呢?我的代码使用硬编码的月份。
表顺序:

cursor.execute("DROP TABLE IF EXISTS `Orders`;")
cursor.execute('''
CREATE TABLE `Orders` (
  `OrderID` INTEGER PRIMARY KEY AUTOINCREMENT,
  `OrderDate` VARCHAR(11) NULL,
  `CustId` INT NULL,
  `TotalAmount` DOUBLE NULL,
  FOREIGN KEY (`CustId`) REFERENCES Customers(`CustID`) ON UPDATE CASCADE
);
''')

餐桌顾客:

cursor.execute("DROP TABLE IF EXISTS `Customers`;")
cursor.execute('''
CREATE TABLE `Customers` (
  `CustID` INTEGER PRIMARY KEY AUTOINCREMENT,
  `FirstName` VARCHAR(11) NOT NULL,
  `LastName` VARCHAR(11) NOT NULL,
  `City` TEXT NULL,
  `Country` TEXT NULL,
  `Phone` VARCHAR(15) NULL
);
''')

这是我写的

cursor = conn.cursor()
for row in cursor.execute('''SELECT Firstname, Lastname, orders.TotalAmount
                            FROM customers
                            INNER JOIN orders on orders.CustID = customers.CustID
                            WHERE  orderDate like '%02-2020'
                            GROUP BY customers.custid, customers.firstname, customers.lastname
                           ORDER BY TotalAmount desc;'''):

                          print(row)
cursor.close()

我是否必须询问用户他们希望在哪个月看到客户花费更多的钱,将其存储在一个变量中,然后执行查询?或者?
从概念上讲,我在想:
询问需要哪一个月的报告
将该变量存储在一个变量中,并生成一个if大小写,如: (if variable = 0 OR variable > 12) then (Error that is not a month) elseif variable = 1 then "WHERE orderDate like '%01-2020'" elseif variable = 2 then "WHERE orderDate like '%02-2020'" elseif variable = 3 then "WHERE orderDate like '%03-2020'" 不确定是不是最好的办法。

7tofc5zh

7tofc5zh1#

在sqlite中,可以只使用字符串函数。假设您想要2020年5月的报告,您可以添加以下内容 where 您的问题:

where orderDate like '%05-2020'

注意:我怀疑您的查询应该使用聚合,因此每个客户的所有订单都分组在一个记录中:

select c.firstname, c.lastname, sum(o.totalamount) monthamount
from customers c
inner join orders o on o.custid = c.custid
where orderDate like '%05-2020'
group by c.custid, c.firstname, c.lastname
order by monthamount desc

相关问题