SQLite: как изолировать предложение WHERE только для одного набора данных в инструкции SELECT? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть база данных с датированными записями клиентов, тип клиента. Некоторые совершают покупку, некоторые нет.

Таблица выглядит так:

DATE|sessionID|customer_type|purchase value| 

Я пытаюсь создать таблицу, которая вычисляет общее количество клиентов, общее количество клиентов, совершивших покупку, и сортирует их по типу и дате (еженедельно).

Код

CREATE TABLE KPIs (

'week' integer,

'customer_type' integer,

'customer_traffic' integer,

'customer_that_purchased' integer
);

INSERT INTO KPIs (

week, 

customer_type, 

customer_traffic, 

customer_that_purchased)

SELECT 

week, 

customer_type_var, 

count(session_id), 

count(purchase_value) 

FROM data 

WHERE purchase_value <> 0 

GROUP BY week, traffic_type_var ;

Проблема, возникающая при этом, заключается в том, что предложение WHERE применяется как для подсчета общего количества клиентов, так и для клиентов, совершивших покупку, что, очевидно, неверно (оно должно применяться только для подсчета клиентов, совершивших покупку).

Как я могу ВЫБРАТЬ несколько наборов данных и чтобы предложения WHERE применялись только к некоторым наборам данных, а не к другим?

1 Ответ

0 голосов
/ 02 июля 2018

Рассмотрим условное агрегирование, переместив предыдущее предложение WHERE в выражение sum:

INSERT INTO KPIs (week, customer_type, customer_traffic, customer_that_purchased)    
SELECT week, customer_type_var, 
       count(session_id), 
       sum(purchase_value <> 0)
FROM data 
GROUP BY week, customer_type_var;
...