如何结合使用sqlite3函数CREATE TABLE AS SELECT、MAX、CASE和AS?

How to use the sqlite3 functions CREATE TABLE AS SELECT, MAX, CASE, and AS in conjunction?

我正在尝试在 sqlite3 中编写一个查询,它将在我的数据库 table 中搜索匹配项,然后根据是否找到匹配项创建一个列。

这是我的代码的样子:

import sqlite3
conn = sqlitet3.connect('mydatabase.db')
cur  = conn.cursor()

query = '''
CREATE TABLE test AS SELECT
identifier,
MAX(CASE WHEN identifier == "ABC123" THEN 1 ELSE 0 AS id_flag)
'''

cur.execute(query)
print(cur.fetchone())

MAX 语句旨在折叠重复值。例如,如果有两行的标识符为 ABC123,则查询将搜索 id_flags 的最大值并仅输出具有该标识符的一行。

因此,我的预期输出(以及我用常规 SQL 编写时的输出)是这样的:

Identifier     id_flag
XYZ234         0
ABC123         1
QRS789         0

这给出了语法错误“接近“AS””。

如果我删除 AS 部分(以及之后的 id_flag)和 运行 代码,则语法错误将移动到“near”)”。

如果我删除括号,语法错误将移动到“靠近“CASE””。

我查看了 sqlite3 syntax flowchart,但我不知道如何构造此查询而不出现语法错误。

感谢您的帮助!

您的查询缺少 FROM 子句和一个 GROUP BY 子句。假设您有一个来源 table(比如 src),并且您希望每个不同的行 identifier,以及指示是否存在重复项的列。

那就是:

create table test as
select identifier, count(*) > 1 as id_flag
from src
group by identifier

如果要检查所有行,如果列 identifier 等于 'ABC123',那么方法如下:

SELECT DISTINCT identifier, identifier = 'ABC123' id_flag
FROM tablename