是否可以在sql中用数学函数创建一些字段?如果是,在这个问题上我应该怎么做?

zbq4xfa0  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(242)

我正在处理一个sql表,它为每天的事务省钱。这是我的table设计:

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 上个月的余额是上个月的余额
有可能在一张table上实现吗?如果是,怎么做?或许有更好的方法。我用的是10.4.6-mariadb。

utugiqy6

utugiqy61#

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

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;

最简单的方法是将其封装在视图中并使用它。
如果您真的想将结果存储在表中,则需要使用触发器。我不推荐这种方法,除非你有某种要求,余额被存储。

相关问题