выберите mysql данные с суммой - PullRequest
0 голосов
/ 21 января 2020

у меня есть таблица order_star_member, которая содержит users_id в качестве покупателя, createAt в качестве времени совершения транзакции покупателем и total_price_star_member в качестве суммы транзакции, i Я хочу найти покупателя из января с транзакцией> = 600000 и покупателя из января, который также совершает транзакцию> = 600000 (оба в этом месяце делают транзакцию> = 600000). января с указанием покупателя, совершившего транзакцию в январе> = 600000 и февраля с указанием покупателя, совершившего транзакцию в феврале> = 600000, после этого я использую следующий синтаксис:

select count(*) as total from (SELECT 
    sum(b.total_price_star_member) as total_transaction, b.users_id
FROM order_star_member b
WHERE
    EXISTS (SELECT 1 FROM january d
            WHERE d.buyer_id = b.users_id) AND
    EXISTS (SELECT 1 FROM february a
            WHERE a.buyer_id = b.users_id) AND
    NOT EXISTS (SELECT 1 FROM order_star_member c
                WHERE c.users_id = b.users_id AND c.createdAt < '2020-01-01') group by b.users_id having sum(b.total_price_star_member) >= 600000 order by total_transaction) inner_query;

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

пример таблицы

Январь 2020

 users_id        total_transaction

- 12                     750000
- 13                     450000
- 14                     300000

февраля 2020

users_id            total_transaction
- 12                        650000
- 13                        550000
- 14                        650000 

, поэтому, когда я запускаю запрос, то users_id 12 появится, потому что в феврале и j за всю историю транзакций он> 600000

1 Ответ

1 голос
/ 21 января 2020
SELECT users_id 
FROM order_star_member  
GROUP BY users_id
HAVING SUM(CASE WHEN MONTHNAME(createdAt) = 'January' 
                THEN total_price_star_member END) >= 600000
   AND SUM(CASE WHEN MONTHNAME(createdAt) = 'February' 
                THEN total_price_star_member END) >= 600000;

скрипка

...