如何结合使用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
我正在尝试在 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