Как я могу решить этот запрос в MySQL - PullRequest
0 голосов
/ 29 августа 2018

У меня есть имя таблицы MySQL daily_transactions, в котором есть пять столбцов, а именно

 id | username | credit | debit | transaction_date

Если пользователь зачисляет на свой счет 100 долларов США, он будет вставлен в таблицу, а при наличии дебета (если пользователь использует наш сервис, скажем, 20 долларов США), он также будет записан так же, как и выписка с банковского счета история произведений.

Теперь вопрос в том, как я могу получить список пользователей, которые сделали общий кредит от 500 до 2000 долларов за последние 3 месяца. То есть сумма всех кредитов на пользователя и, если он составляет не менее 500-2000 долларов за последние 3 месяца, покажите его.

Если вы пробовали этот запрос ниже, но он не работает

  SELECT username,
         SUM(debit)  
    FROM daily_transactions 
   WHERE sum(credit) >=500 
     AND SUM(credit)<=2000 
     AND DATEDIFF(NOW(),date_details)<=90;

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Having - это групповой фильтр, поэтому вам нужно иметь здесь

   SELECT username,SUM(debit)     
    FROM daily_transactions 
    WHERE  DATEDIFF(NOW(),date_details)<=90;
    group by username
    having sum(credit) >=500 AND SUM(credit)<=2000
0 голосов
/ 29 августа 2018

Вам нужно предложение HAVING:

SELECT username,SUM(debit)
FROM daily_transactions
WHERE date_details >= CURDATE() - INTERVAL 90 DAY
GROUP BY username
HAVING SUM(credit) >= 500 AND SUM(credit) <= 2000

Обратите внимание, что фильтрация по дате выполняется в предложении WHERE. Фильтрация по итогу происходит после GROUP BY в HAVING.

Я также изменил сравнение дат, чтобы избежать использования функции. Это позволяет использовать индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...