是否可以在 SQL 中创建一些具有数学函数的字段?如果是,我应该如何解决这个问题?
Is it posible to create some field with math function in SQL? if yes, how should i do it in this problem?
我正在开发一个 SQL table 每天都可以省钱的交易。这是我的 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
balance_lastMonth 是上个月的余额
是否可以一次实现table?如果是的话怎么办?或者可能有更好的方法来做到这一点。我正在使用 10.4.6-MariaDB。
您可以使用查询来计算余额:
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;
最简单的做法是将其封装在一个视图中并直接使用它。
如果您确实想将结果存储在 table 中,则需要使用触发器。我不推荐这种方法,除非您有某种存储余额的要求。
我正在开发一个 SQL table 每天都可以省钱的交易。这是我的 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
balance_lastMonth 是上个月的余额
是否可以一次实现table?如果是的话怎么办?或者可能有更好的方法来做到这一点。我正在使用 10.4.6-MariaDB。
您可以使用查询来计算余额:
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;
最简单的做法是将其封装在一个视图中并直接使用它。
如果您确实想将结果存储在 table 中,则需要使用触发器。我不推荐这种方法,除非您有某种存储余额的要求。