我正在尝试在商店中创建一个“顶级买家”模块,我对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查询技能非常基础,因此我似乎并没有找到很多好的解决方案。我想过要做成一张桌子,当用户购买东西时会在其中添加钱。
答案 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
将日期设置为字符串格式并比较结果相比,此方法通常更有效。