sql - 是否可以在 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。
解决方案
您可以使用查询计算余额:
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;
最简单的做法是将其封装在一个视图中并使用它。
如果您确实想将结果存储在表中,则需要使用触发器。我不推荐这种方法,除非您对存储余额有某种要求。
推荐阅读
- python - 熊猫左加入返回更大的矩阵并且不工作
- javascript - 无法从“firebase.js”解析模块“firebase”:在项目中找不到 Firebase
- reinforcement-learning - 网格世界的深度 Q 学习
- node.js - 如何在 mongoose 中查找前 10 名最受欢迎和前 10 名最受欢迎的数据
- react-native - 多个反应原生动画与基于状态的复活?
- javascript - 根据标识值隐藏 DataTable 中的编辑和删除按钮
- javascript - 如何从数据库查询创建动态下拉列表?
- javascript - testing-library/react 如何在动态生成错误消息时测试无效输入
- express - 使用 websockets 从工作服务器更新数据?
- sas - 如何在SAS中打印带有列标签的前10行