【发布时间】:2020-01-20 17:33:42
【问题描述】:
解决方案:我安装了不支持 RANK() 的过期版本的 sqlite。我通过安装 Python3.7.4 解决了这个问题
当用户根据两列之和按降序排序时,我试图找到用户的位置。我在 SQLite DB 浏览器中测试了这个查询,它返回了正确的结果,但是当我将它复制到我的 Python 脚本中时,它会在 "("
之一处引发语法错误我尝试在执行查询之前运行代码并停止它,以便我可以将查询逐字复制到数据库浏览器中。当我这样做时,它工作得很好,但是当我在我的脚本中执行查询时它失败了
这是字符串连接返回的纯文本查询:
SELECT top_rank FROM (
SELECT username, RANK() OVER(ORDER BY summed DESC) AS 'top_rank'
FROM (
SELECT SUM(positive_qc) - SUM(negative_qc) AS 'summed', username
FROM sub_activity
WHERE sub_name IN('cryptocurrency', 'cryptomarkets', 'cryptotechnology', 'blockchain')
GROUP BY username)
) WHERE username = 'someuser'
这是我用来获取该查询的代码:
select_str = "SELECT top_rank FROM(" + \
"SELECT " + self.KEY2_USERNAME + ", RANK() OVER(ORDER BY summed DESC) AS 'top_rank' " \
"FROM(" \
"SELECT SUM(" + self.KEY2_POSITIVE_QC + ") - SUM(" + self.KEY2_NEGATIVE_QC + ") " \
"AS 'summed', " + self.KEY2_USERNAME + " " \
"FROM " + self.TABLE_SUB_ACTIVITY + " " \
"WHERE " + self.KEY2_SUB_NAME + " IN('" + "', '".join(sub_list) + "') " \
"GROUP BY " + self.KEY2_USERNAME + ")" \
") WHERE " + self.KEY2_USERNAME + " = ?"
我在脚本中执行时得到的确切错误是
sqlite3.OperationalError: near "(": syntax error
更新:我已将错误范围缩小到查询的 RANK () OVER(ORDER BY summed DESC) 部分
【问题讨论】:
-
你试过在
FROM和(之间加一个空格"SELECT top_rank FROM(" + \吗? -
@MyNameIsCaleb 我刚刚尝试过并得到了相同的结果。我什至在所有左括号和右括号之间添加了空格,并且错误没有改变。这是查询现在的样子:
sql SELECT top_rank FROM ( SELECT username, RANK() OVER ( ORDER BY summed DESC ) AS top_rank FROM ( SELECT SUM ( positive_qc ) - SUM ( negative_qc ) AS summed, username FROM sub_activity WHERE sub_name IN ( 'cryptocurrency', 'cryptomarkets', 'cryptotechnology', 'blockchain'' ) GROUP BY username ) ) WHERE username = ? -
在帖子中,
WHERE sub_name IN('cryptocurrency'这看起来像是问题所在。在IN和(之间。 -
@WEI_DBA 我只是尝试在每个 ( 和 ) 之前和之后使用空格执行查询,但它仍然有相同的错误
-
您的 SQLite 版本是否至少为 3.25.0 才能使用窗口函数?