SQLITE DISTINCT COUNT в ошибке генерирования оператора strftime - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть запрос в SQLite через Pandas в блокноте jupyter.

Приведенный ниже запрос выполняется должным образом, за исключением того, что я хочу, чтобы dayofweek_count подсчитывал количество вхождений каждого дня недели. Для каждого дня может быть несколько записей (т. Е. В понедельник 17.02.20 может быть 4 записи, но я хочу, чтобы понедельник 2/17/20 считался один раз)

df_total_weekday=pd.read_sql_query("SELECT CASE cast(strftime('%w', event_date) as integer)" 
    "when 0 then 'Sunday'"
    "when 1 then 'Monday'"
    "when 2 then 'Tuesday'"
    "when 3 then 'Wednesday'"
    "when 4 then 'Thursday'" 
    "when 5 then 'Friday'"
    "else 'Saturday' end as dayofweek"
    ",COUNT(strftime('%w', event_date)) as dayofweek_count"
    ",SUM(quantity) as total_quantity FROM subscription_data GROUP BY 1 ORDER BY strftime('%w', event_date)",conn,parse_dates=['event_date'])

Но этот запрос выдает синтаксис ошибка около DISTINCT, но я не могу понять, почему. Я пробовал DISTINCT (event_date), а также DISTINCT event_date.

df_total_weekday=pd.read_sql_query("SELECT CASE cast(strftime('%w', event_date) as integer)" 
        "when 0 then 'Sunday'"
        "when 1 then 'Monday'"
        "when 2 then 'Tuesday'"
        "when 3 then 'Wednesday'"
        "when 4 then 'Thursday'" 
        "when 5 then 'Friday'"
        "else 'Saturday' end as dayofweek"
        ",COUNT(strftime('%w',DISTINCT event_date)) as dayofweek_count"
        ",SUM(quantity) as total_quantity FROM subscription_data GROUP BY 1 ORDER BY strftime('%w', event_date)",conn,parse_dates=['event_date'])

Что мне не хватает?

1 Ответ

0 голосов
/ 18 февраля 2020
COUNT(strftime('%w',DISTINCT event_date))

Это синтаксическая ошибка, потому что strftime() не понимает DISTINCT; это не агрегатная функция (а с агрегатными функциями она работает только с функциями с одним аргументом). В любом случае COUNT(strftime(...)) не имеет особого смысла, если только некоторые из ваших event_date значений не будут приняты как строки даты / времени (что может привести к strftime() return NULL).

...