#python #sql #sqlite #select #create-table
#python #sql #sqlite #выберите #create-table
Вопрос:
Я пытаюсь написать запрос в sqlite3, который будет искать совпадение в моей таблице базы данных, а затем создать столбец в зависимости от того, находит ли он совпадение или нет.
Вот как выглядит мой код:
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 (и id_flag впоследствии) и выполню код, синтаксическая ошибка переместится на «рядом») «».
Если я удалю круглые скобки, синтаксическая ошибка переместится на «рядом с»РЕГИСТРОМ»».
Я просмотрел блок-схему синтаксиса sqlite3, но я не могу понять, как структурировать этот запрос и не получить синтаксическую ошибку.
Спасибо за вашу помощь!
Комментарии:
1. … будет искать совпадение в моей таблице базы данных… какая таблица? Опубликуйте образцы данных.
Ответ №1:
В вашем запросе отсутствует FROM
предложение и GROUP BY
предложение. Предположительно, у вас есть исходная таблица (скажем src
), и вам нужна одна строка на distinct identifier
вместе со столбцом, который указывает, существует ли дубликат.
Это было бы:
create table test as
select identifier, count(*) > 1 as id_flag
from src
group by identifier
Ответ №2:
Если вы хотите проверить все строки, если столбец identifier
равен 'ABC123'
, то вот как это сделать:
SELECT DISTINCT identifier, identifier = 'ABC123' id_flag
FROM tablename