使用 MySQL 获取按货币分组的交易合并总额

发布日期:2026-06-25 06:09:05   来源 : 杭州电子商务研究院    浏览量 :14
杭州电子商务研究院 发布日期:2026-06-25 06:09:05  
14

介绍

本指南将介绍如何使用 MySQL 对包含交易信息的数据表执行操作。我们的主要示例将涉及货币交易。

交易和表数据

考虑一个数字交易,其中值存储在一个地方,而上下文存储在其他地方。例如,当发生现金交易时,我们可以在一个表中表示现金交易的方向,在另一个表中表示金额,以避免出现负数。同样,有很多论坛和在线评论系统,您可以在其中投赞成票或反对票。这些投票将与其各自的计数分开存储,从而具有完全正值,但它们将通过外键链接到包含每个投票的原始值的表,无论它们是正数还是负数。

金钱交易例子

我遇到了与不同货币交易相关的类似问题。交易类型将决定它是入账交易还是出账交易。针对同样的情况进行建模,我们今天将研究三件事:

  • 根据交易的价值将其连接起来。
  • 根据值的关系创建一个乘数。
  • 创建按不同货币和用户分组的合并总额。

分组

分组时,聚合函数是关键。我们将对包含财务详细信息的示例表应用某些聚合函数。本文提供了该表的数据定义语言 (DDL)。

该表的结构如下:

柱子 类型
转移ID int(11) 自动递增
主题 varchar(100)
数量 十进制(7,2)
货币 炭(3)
方向 int(11)
用户身份 int(11)
时间戳 时间戳 [CURRENT_TIMESTAMP]

对于此表,我添加了一个新列来指示方向。1表示贷方,2表示借方。值12对我们来说没有任何意义,但它们可作为保存值的另一个表的外键。我有意使用正数来模拟现实世界的情况。

请考虑下面显示的示例数据集,它代表一个用户的值:

转移ID 主题 数量 货币 方向 用户身份 时间戳
1 薪水 2000.00 美元 1 1 2017-05-12 09:15:56
2 售出电视 150.00 英镑 1 1 2017-05-12 09:16:23
3 移动帐单 25.00 英镑 2 1 2017-05-12 09:19:03
4 房屋租金 1500.00 美元 2 1 2017-05-12 09:21:03
5 食物 10.00 英镑 2 1 2017-05-12 09:24:33
6 互联网账单 250.00 美元 2 1 2017-05-12 09:26:03
7 增值税 100.00 英镑 2 1 2017-05-12 09:26:45
8 信用卡帐单 150.00 美元 2 1 2017-05-12 09:27:46
9 进口费用 75.00 美元 2 1 2017-05-12 12:27:46
10 现金提款 20.00 美元 2 1 2017-05-12 12:28:20

获取总金额。

要获取所有金额的总和,请使用SUMGROUP BY函数。在上述情况下,我们将使用以下查询来获取所有交易的总和,无论用户、方向和/或货币如何。

      SELECT SUM(`Amount`) AS `Total` FROM `transactions`;
    

上面将会输出类似这样的内容:

全部的
4185.00

信用卡和借记卡

这不是我们的理想情况。我们有不同的行获得不同的值。最重要的是,借记金额应该从值中减去。在这种情况下,我们可以使用GROUP BY函数拆分收入和支出,这给了我们以下查询:

      SELECT SUM(`Amount`) AS `Total` FROM `transactions` GROUP BY `Direction`;
    

上述查询将产生以下形式的结果:

全部的
2150.00
2130.00

该表表示所有朝同一方向进行的交易总额的列表。

不同的货币

用同样的方法,我们将能够通过用逗号分隔的列名来添加另一个分组。因此,如果我们需要添加下一阶段的分组,让我们以这种方式添加货币列:

      SELECT SUM(`Amount`) AS `Total` FROM `transactions` GROUP BY `Direction`, `Currency`;
    

以上结果:

全部的
150.00
2000.00
135.00
1995.00

如上所示,此命令会在数据中创建额外的拆分。通过添加货币类别,我们首先按方向分组,然后按货币分组,从而得到四个不同的值。

但是,我们的输出相当混乱,因为我们不知道每个数字代表什么。让我们添加更多列来揭示行的含义:

      SELECT SUM(`Amount`) AS `Total`, `Currency`, `Direction` FROM `transactions` GROUP BY `Direction`, `Currency`;
    

查询现在看起来更好:

全部的 货币 方向
150.00 英镑 1
2000.00 美元 1
135.00 英镑 2
1995.00 美元 2

与初始数据集相比,您能看出GROUP BY命令对我们的查询有什么影响吗?值按GROUP BY方案指定的顺序显示。输出首先按Direction 排序,然后按Currency排序,从GBP在字母表中排在USD之前可以看出。</fon

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据