首页 > 解决方案 > 是否可以在 SQL 中使用数学函数创建一些字段?如果是,我应该如何解决这个问题?

问题描述

我正在处理一个 SQL 表,它可以为每天节省金钱交易。这是我的桌子设计:

    CREATE TABLE `transaction` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `date` datetime NOT NULL,
 `member_id` int(11) NOT NULL,
 `name` varchar(60) CHARACTER SET utf8 DEFAULT NULL,
 `balance_lastMonth` int(11) NOT NULL,
 `income` int(11) NOT NULL,
 `outcome` int(11) NOT NULL,
 `balance` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `member_id` (`member_id`),
 CONSTRAINT `transaction_ibfk_1` FOREIGN KEY (`member_id`) REFERENCES `member` (`id`)
) ENGINE=InnoDB CHARSET=latin1

余额字段公式:balance_lastMonth+ income-outcome 和 balance_lastMonth 是上个月的余额

有可能在一张桌子上实现吗?如果是的话怎么办?或者可能有更好的方法来做到这一点。我正在使用 10.4.6-MariaDB。

标签: sqlphpmyadminmariadbmariadb-10.4

解决方案


您可以使用查询计算余额:

select t.*,
       sum(income - outcome) over (partition by member_id order by date) as balance,
       sum(income - outcome) over (partition by member_id order by date) - (income - outcome) as balance_lastmonth
from transaction t;

最简单的做法是将其封装在一个视图中并使用它。

如果您确实想将结果存储在表中,则需要使用触发器。我不推荐这种方法,除非您对存储余额有某种要求。


推荐阅读