如何在mysql

时间:2018-08-29 11:39:03

标签: mysql sql mysqli pdo

我有MySQL表名daily_transactions,其中有五列

 id | username | credit | debit | transaction_date

如果用户将$ 100记入帐户,则会插入表格中;如果有借记卡(如果用户使用我们的服务,假设说$ 20),也会记录该帐户,就像银行对帐单一样历史作品。

现在的问题是,在过去的3个月中,如何获得信用总额在$ 500到$ 2000之间的用户列表。也就是说,将每位用户的所有信用额相加,如果最近3个月内至少有$ 500至$ 2000,请显示该信用额。

如果在下面尝试过此查询,但无法正常工作

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

2 个答案:

答案 0 :(得分:1)

您需要一个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 BYHAVING之后进行总计过滤。

我还更改了日期比较以避免使用该功能。这样可以使用索引。

答案 1 :(得分:1)

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