如何用SQL查询每个用户的总余额和首次交易日期
你需要的统计结果可以直接通过分组聚合查询实现,无需自定义函数,SQL语句如下:
SELECT card_id, SUM(amount) AS 总金额, MIN(created_at) AS 首次交易日期 FROM Transactions GROUP BY card_id ORDER BY card_id
如果你确实需要只统计金额为负的交易,只需在FROM Transactions后添加WHERE amount < 0过滤条件即可。
你之前写的自定义函数存在多处问题:
- 逻辑冗余,不需要先插入
card_id再分两次更新字段,分组查询一次就能得到全部结果 SUM(MIN(AMOUNT))属于非法嵌套聚合,在绝大多数SQL方言中都会执行报错- 硬编码过滤了金额小于0的交易,和你描述的"统计所有交易总金额"的需求不匹配
使用你提供的测试数据执行上述查询,得到的结果如下:
| card_id | 总金额 | 首次交易日期 |
|---|---|---|
| 1 | 1300.00 | 2016-01-01 |
| 2 | 400.00 | 2016-01-04 |
| 3 | 800.00 | 2016-01-06 |
内容的提问来源于stack exchange,提问作者Jeevan Gharti
相关产品推荐
相关产品推荐

