выберите условие на mysql, чтобы узнать сумму покупателя - PullRequest
0 голосов
/ 03 февраля 2020

у меня есть 2 таблицы, первая таблица - это order_buyer, в котором в качестве покупателя содержится идентификатор_покупателя , * в качестве транзакции - идентификатор (таким образом, покупатель может иметь более 1 идентификатора, потому что он, вероятно, имел больше чем 1 транзакция на 1 покупателя), и созданный при как дата транзакции. 2-я таблица - это order_match, который я хочу принять order_status_id в качестве статуса транзакции, если статус (4, 5, 6, 8), то транзакция одобрена.

на этом случай, когда я хочу узнать среднее значение транзакции для каждого покупателя за месяц, но не включил нового покупателя, у которого была транзакция в этом месяце

пример: данные за январь содержат среднее значение транзакции для покупателя, у которого была транзакция в январе но они совершают транзакцию до января, но не включают нового покупателя в январе.

пример: так, если A совершает транзакцию в декабре 2018 года и январе 2019 года, B выполняет транзакцию только в январе 2019 года (новый покупатель) и C делая транзакцию в сентябре 2018 года и январе 2019 года, когда я хочу посчитать среднестатистического покупателя до транзакции января 2019 года, я просто подсчитываю среднее значение покупателя А и C, потому что этот покупатель не является новым покупателем в январе 2019 года.

Я пробовал с этим синтаксисом, но я не знаю, почему мой синтаксис равен 0, когда я проверяю это не 0

SELECT month(createdat), year(createdat), count(buyer_id), count(id), count(id)/count(buyer_id) from (
SELECT 
    b.buyer_id, b. createdat, b.id
FROM
    order_match d,
    order_buyer b
WHERE
    d.order_buyer_id = b.id
        AND d.order_status_id IN (4 , 5, 6, 8)
        AND NOT EXISTS( SELECT 
            1
        FROM
            order_match c,
            order_buyer bb
        WHERE
            c.order_buyer_id = bb.id
                AND bb.buyer_id = b.buyer_id
                AND bb.createdAt >= b.createdAt
                AND c.order_status_id IN (4 , 5, 6, 8))) z
group by month(createdat), year(createdat) order by 2 asc, 1 asc;
...