如何从数据库中选择用户的所有条目?

时间:2019-02-09 20:08:27

标签: php mysql sql

我正在尝试在商店中创建一个“顶级买家”模块,我对MySQL查询有些困惑。

我有一张表,其中包含所有交易,我需要选择过去一个月中花钱最多的人(可以进行一次或多次交易)。

我所拥有的:

name | money spent
------------------
john | 50
mike | 12
john | 10
jane | 504
carl | 99
jane | 12
jane | 1

我想看的东西

查询后,我需要查看:

name | money spent last month
-----------------------------
jane | 517
carl | 99
john | 60
mike | 12

我该怎么做?

由于我的MySQL查询技能非常基础,因此我似乎并没有找到很多好的解决方案。我想过要做成一张桌子,当用户购买东西时会在其中添加钱。

1 个答案:

答案 0 :(得分:2)

这是一个简单的汇总查询:

SELECT t.name, SUM(t.moneyspent) money_spent_last_month
FROM mytable t
GROUP BY t.name
ORDER BY t.money_spent_last_month DESC
LIMIT 1

该查询将客户姓名所花的总金额相加。结果按总支出递减的顺序排序,仅保留第一行。

如果您要过滤上个月的数据,则需要在表中的一列中记录交易日期,例如transaction_date,然后可以添加一个该查询的WHERE子句,例如:

SELECT t.name, SUM(t.moneyspent) money_spent_last_month
FROM mytable t
WHERE 
    t.transaction_date >= 
        DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY)
    AND t.transaction_date <= 
        DATE_SUB(NOW(), INTERVAL 1 MONTH)
GROUP BY t.name
ORDER BY t.money_spent_last_month DESC
LIMIT 1

与使用DATE_FORMAT将日期设置为字符串格式并比较结果相比,此方法通常更有效。