SQL - ГДЕ условие из другой таблицы - PullRequest
0 голосов
/ 05 декабря 2018

Мне нужно изучить, сколько раз клиент покупает что-то в приложении за каждую сессию.Поэтому мне приходится работать с двумя таблицами.Первый (называемый ' сеанс ') структурирован следующим образом:

user_id |session_id |start_session_time |end_session_time

Второй (называемый ' закупками ') структурирован следующим образом:

user_id |метка времени |purchase_id

, где user_id, session_id и purchaseases_id уникальны.

Моя конечная цель будет иметь таблицу, которая подсчитывает, сколько раз пользователь купил в каждой сессии.Вывод, который я хотел бы получить:

user_id |session_id |start_session_time |end_session_time |nb_purchases

На мой взгляд, это будет такой запрос:

SELECT sessions.user_id, sessions.session_id, sessions.start_time,
       sessions.end_time, count(purchases.purchase_id)
FROM sessions 
LEFT JOIN purchases 
    ON sessions.user_id = purchases.user_id
WHERE purchases.timestamp BETWEEN sessions.start_time AND sessions.end_time

Может кто-нибудь помочь мне с этим, пожалуйста?

Я используюSQL Amazon Redshift.

Заранее спасибо,

Андреа

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вы используете left join, поэтому условие должно идти в предложении on.Тогда вам также нужно GROUP BY:

SELECT s.user_id, s.session_id, s.start_time, s.end_time, count(p.purchase_id)
FROM sessions s LEFT JOIN
     purchases p
     ON s.user_id = p.user_id AND
        p.timestamp BETWEEN s.start_time AND s.end_time
GROUP BY s.user_id, s.session_id, s.start_time, s.end_time;
0 голосов
/ 05 декабря 2018

Вы пропустили добавить GROUP BY:

SELECT
    sessions.user_id
   ,sessions.session_id
   ,sessions.start_time
   ,sessions.end_time
   ,COUNT(purchases.purchase_id)
FROM sessions
LEFT JOIN purchases
    ON sessions.user_id = purchases.user_id
WHERE purchases.timestamp BETWEEN sessions.start_time AND sessions.end_time
GROUP BY
    sessions.user_id
   ,sessions.session_id
   ,sessions.start_time
   ,sessions.end_time
...