【问题标题】:sqlite - WHERE statements using a multiple of two columnssqlite - 使用两列的倍数的 WHERE 语句
【发布时间】:2016-12-14 22:14:40
【问题描述】:

我目前正在使用 python 2.7 中的 sqlite 进行项目,需要返回列 A * 列 B 的值大于某个数字的行。下面是代码的样子:

c.execute('SELECT * FROM table_1 WHERE validation=1 AND colA * colB > 10000')

唯一的问题是这不起作用...我知道这在 MySQL 中是可能的,所以我希望它也可以在 sqlite 中工作,尽管我没有任何运气找到完成这项工作的方法。 所以我的问题是:是否可以使用 sqlite 执行这种类型的操作,如果可以,如何?

编辑:这里有更完整的代码,老实说,我假设我有一个小的语法错误,或者根本不可能。因为我的代码很长,我觉得不可能发布所有内容。我要查询的表是这样构建的:

    c.execute('CREATE TABLE IF NOT EXISTS table_1(ticker TEXT, colA INTEGER, colB INTEGER, company_name TEXT, market_cap TEXT, sector TEXT, validation INTEGER, UNIQUE(ticker) ON CONFLICT IGNORE)')

表格前几项如下:

ticker,colA,colB,company_name,market_cap,sector,validation

"ACFN","0.18","71,200","Acorn Energy","5.16M","工业","1"

"ADGE","0.3","64,458","American DG","14.71M","Industrial Goods","1"

"ACUR","0.97","66,358","Acura Pharmaceuticals","11.52M","Healthcare","1"

此外,使用以下语句确实会返回上面的最后一行。

c.execute('SELECT * FROM table_1 WHERE validation=1 AND colB > 25000 AND colA> 0.5')

但是如果这个语句返回最后一列,那么我将 colA 与 colB 相乘的原始代码也应该这样做。

【问题讨论】:

  • “唯一的问题是这不起作用” - 为什么不呢?您收到错误还是结果不正确?
  • 根据here看来应该支持*...
  • 不起作用是什么意思?它会给出错误、空结果还是其他什么?
  • 啊,对不起。它返回一个空列表,尽管值在表中。没有错误。
  • 您展示的代码完美运行,如here 所示。因此,问题出在您未显示的代码中。请将您的原始程序缩减为显示错误的最短程序。请edit您的问题并将该短程序复制粘贴到您的问题中。请参阅minimal reproducible example 了解更多信息。

标签: python mysql python-2.7 sqlite


【解决方案1】:

所以,为了正式宣布并结束此事,我将写下我自己问题的答案。 输入 colA 的数据采用十进制值(例如:0.91),输入 colB 的数据采用大于 1000 的整数值(例如:31,000)。当我尝试构建一个 SELECT 语句时,例如:

c.execute('SELECT * FROM table_1 WHERE validation=1 AND colB > 25000 AND colA> 0.5')

它返回了我想要的值,因为 31,000 > 25000 为真,而 0.91 > 0.5 为真。但是,当我尝试在 WHERE 语句中将两列相乘时,它会将两个数字都读取为十进制值。因此,语句 colA * colB > 10000 是错误的,因为 0.91*31.000 = 28.21。只需删除 colB 中的逗号即可解决问题。 尽管如此,这个问题仍然很奇怪,因为当人们尝试执行数学运算时,它只会将 31,000 读取为 31.000。

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多