mysql 用户财务支出收入表格模板表 要统计收入和支出的余额明细 但是财务支出收入表格模板表只有纪录,求余额

如何使用Mysql正确的处理财务数据【mysql吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:47,311贴子:
如何使用Mysql正确的处理财务数据收藏
财务数据相比于普通的互联网应用数据,对数据的一致性有更高的要求。因为涉及到用户金钱的流动,出现问题就意味金钱和声誉上的损失。在用 Mysql 处理财务数据时,我认为应该遵循以下原则:使用 DECIMAL 数据类型存储金额 。因为浮点数精度是有限的,并且无法精确的表示一些数字。应用程序也应该使用 Decimal 函数库来进行金额的加减乘除的运算,比如 Python 的 decimal 模块,C++ 的 boost
Multiprecision
库。使用事务来更新数据库 。涉及到数据库多个记录更新时,事务能够做到要么全部成功,要么全部失败,这保证了数据的一致性。Mysql 使用事务需要 InnoDB 引擎。更新数据库时使用悲观锁 。更新数据前使用 SELECT …
FOR UPDATE; 来查询,这样防止并发的请求读到脏数据,导致数据错乱。虽然加锁会影响性能,但为了数据的一致性也是值得的。记录资金变化的流水日志 。不能简单的只记录用户的金额,还要记录每笔资金的来龙去脉,包括变化的大小、时间、业务、更新前金额、更新后金额、备注等,另外还有记录业务ID防止重复更新金额。这样在对账的时候才能有理有据。下面以一个完整的示例来说明如何设计一个完备的记账系统用来记录人民币余额,这里精度只需要2位小数就可以了。假设已经有一个用户表,每个用户有一个唯一ID。我们需要创建两张表,一张余额表,一张流水表:CREATE TABLE `balance` (
`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` int NOT NULL,
`item` varchar(10) NOT NULL,
`balance` decimal(20,2) NOT NULL) ENGINE=InnoDB;CREATE TABLE `history` (
`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`user_id` int NOT NULL,
`item` varchar(10) NOT NULL,
`amount` decimal(20,2) NOT NULL,
`befor` decimal(20,2) NOT NULL,
`after` decimal(20,2) NOT NULL,
`business` varchar(30) NOT NULL,
`business_id` varchar(100) NOT NULL,
`detail` text) ENGINE=InnoDB;为了加快查询速度,另外为了有效利用 InnoDB 的行级锁,我们需要给两张表加上联合索引。另外,我们需要保证流水记录中 user_id, item, business, business_id 的组合是唯一的,避免重复更新数据。ALTER TABLE balance ADD INDEX `user_item_idx` (`user_id`, `item`);ALTER TABLE history ADD INDEX `user_item_idx` (`user_id`, `item`);ALTER TABLE history ADD UNIQUE update_unique (user_id, item, business, business_id);假设这时候用户 ID 为 1 的用户充值了 100 元人民币,我们需要把用户的人民币余额加上 100 元,我们要如何处理呢?这里我们还需要一个充值表用来保存用户的充值记录,同时,我们再创建一个提现表来表示用户提现记录,如下所示:CREATE TABLE `deposit` (
`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` int NOT NULL,
`item` varchar(10) NOT NULL,
`amount` decimal(20,2) NOT NULL) ENGINE=InnoDB;CREATE TABLE `withdraw` (
`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` int NOT NULL,
`item` varchar(10) NOT NULL,
`amount` decimal(20,2) NOT NULL) ENGINE=InnoDB;首先,开始一个事务,创建充值记录:START TRANSACTION;INSERT INTO deposit VALUES (NULL, 1, 'CNY', '100')插入成功后,我们可以使用 MYSQL 的 API 获取到上次插入后生成的自增 ID 的值,假设这里也为 1. 然后我们需要从数据库查询当前余额。查询的时候注意要使用 FOR UPDATE 来锁住该记录,避免其它并发的请求读到脏数据。即使当前该记录不存在,在事务提交之前,其它读请求仍然被阻塞读不到数据的。SELECT id, balance FROM balance where user_id = 1 and item = 'CNY' FOR UPDATE;由于用户是新注册的,查询到的数据为空,所以我们创建新的记录:INSERT INTO balance VALUES (NULL, 1, 'CNY', '100');然后我们要在流水表中记录下这次的变更操作:INSERT INTO history VALUES (NULL, NULL, 1, 'CNY', '100', '0', '100', 'deposit', '1', '');最后提交事务:COMMIT;事务提交后,所有的数据都写入到数据库中了,中间如果有异常发生,则执行ROLLBACK;来放弃所有的变更。假设过了一段时间用户要求提现 50 元,操作流程如下:START TRANSACTION;SELECT id, balance FROM balance where user_id = 1 and item = 'CNY' FOR UPDATE;假设读出的 id 也为 1. 由于用户之前充值了 100 元还没有使用,所以余额是 100,大于 50 满足提现条件。如果不满足的话需要执行 ROLLBACK. 然后:INSERT INTO withdraw VALUES (NULL, 1, 'CNY', '50');UPDATE balance set balance = '50' WHERE id = 1;INSERT INTO history VALUES (NULL, NULL, 1, 'CNY', '-50', '100', '50', 'withdraw', '1', '');COMMIT;这就完整的实现了整个充值和提现的流程。当然,这里示例的充值和提现是最简化的流程,实际业务中,充值和提现往往涉及到多种状态的流转。并且在提现中,用户发起提现和实际进行转账不可能是同时进行的,中间可能会取消操作,直接扣除资金不太妥当,更妥当的做法是把待提现的资金冻结起来,冻结操作其实就是创建一个新的 item: CNY_FREEZE, 在 CNY 上扣减,然后在 CNY_FREEZE 上增加来实现。转账后再从 CNY_FREEZE 中扣除。如果取消操作则取消冻结,从 CNY_FREEZE 扣减,增加到 CNY 上面,这样整个流程在流水日志上都有体现。原地址:
登录百度帐号如果不做报表分析,那你每天记账也可能只是白费功夫 - 少数派
请选择你要投稿的专栏
如果不做报表分析,那你每天记账也可能只是白费功夫
0}" v-cloak>
先问为什么
一问:为什么要记账?
当你已经点开这篇文章时,我相信并没有必要去过多地渲染记账的好处,因为想进一步了解报表用途的你应该至少有记账的基础。只有在连续的记录基础之上,才能了解记账的、想要晋升至,则需要对所记录的账务进行统计与分析,这时就需要用到本文的核心:报表。
二问:为什么要用报表?
在搞清楚怎样用报表分析收支之前,我们先要搞清楚为什么要用报表才能达到记账的第三层级。
记账,顾名思义,只是记录收支,而报表则可以获得所有收支记录的精华——开支统计。
有效及完整的账目可以了解可控与不可控的经济消费;在可控的范围内对经济收入与支出进行统计分析,记账的结果就不再是流水账,而是可以反映一个人财务状况的客观依据。
通过报表提取有效信息在某种程度上来说就是在「大数据」的基础上对个人的资产、消费流向、数量进行监控、控制自己的消费。
然而……道理我们都懂,所以我们(貌似)能锲而不舍地输入数据,但是它的价值何在?我们口中一直在强调着的统计分析的核心又是什么?
它的价值就在于信息输出,我个人将报表的信息输出划分成「2+2」,两项必修+两项选修:
两项必修:总体资产净值走势+支出分类统计,它们能提供有多少钱和钱花到哪去的信息。这是所有记账人必定存在的共同需求,也是几乎所有支持报表功能记账 App 都会提供的两项,
两项选修:品牌消费集中度+预算报表管理。这两项报表只能在部分支持收款人(商家)和预算管理的记账 App 中输出,它们能告诉你,你的品牌消费喜好和预算使用情况。
三问:多久做一次报表信息输出?
价值问题搞清楚了,第二步就是要弄明白统计分析的核心是什么。
试问,如果我们不问结果地不间断记十年账,想基于它们得出什么结论?
毋庸置疑的是,这十年间一共花了多少钱和花钱的总体走势一定可以得出,但是,没有对比就没有伤害,只有将这十年划分为一个个不同的时间段,才能有价值地分析支出情况。这也是为什么会计理论中要将时间段划分为一个个财政年,也就是所谓的会计周期。此处的会计周期,对于个人财务管理来说,最佳的统计周期是工资发放周期,对我们大多数人来说是一个月。
除此之外,固定消费通常也是基于工资发放周期,例如房租、话费、订阅费等。在除去这些每月不变的固定支出后,剩余的变量就能通过报表反映出来——然后你就可以去(面壁)反思了。
另外,在将固定消费去除后,我们还可以更加科学地制定预算,在专业记账 App 中进行预算管理的报表输出。
四问:什么人有需求?
原因和周期解决了之后,最后一个问题就是:报表使用的需求者有哪些?
理论上来说,除去所有不差钱的「壕」以外,人人都有需求。
然而,财务管理和时间管理在某些方便异常相似,一条不落地记账+定期完美地输出报表就相当于完美地将计划制定到每一个细节,然后呢?不回顾并分析报表,不执行计划,只能用一句话来概括——要你(报表/计划)有什么用?
所以,只有那些通过分析报表找出自己消费问题所在并作出调整的人,才是真正的受众。
注意,我说的是调整而不是改正,因为花钱永远没有对错,只有在当下情况中合适与不合适,花的多并不是错,花的少也不值得表扬,只有通过不断的调整找到平衡点,才是使用报表后最应该达到的目的。
如何用好报表
说了这么多,都还没有讲到真正的干货——报表的使用。每个记账 App 都有自己特有的报表系统,但是总体理念都是一样的,就像我前文说到的:报表分为两项必修+两项选修,超出这四个范围的内容不能说没有意义,只是说意义不大,因为这四项已经能将个人理财的绝大多数需求涵盖了。
接下来我就以
这个以报表强大著称的专业记账 App 为例,分析如何用 MoneyWiz 处理这 2+2 的报表需求。
为了更清晰地开始各类报表的对比,先对 MoneyWiz 的图表类型进行简单介绍。MoneyWiz 一共有四种图表类型:
条形图和柱状图?是的,它们不是同一种图表类别, 因为 MoneyWiz 的中文翻译问题,这里会有理解障碍。其实,所谓「条形图」就是我们通常理解的柱状图;而「柱状图」则指的是折线图。毕竟不是本地 App,开发商表示后续会在更新中改正。
为了不引起图表名称的混淆,在下文中我会按照以下名称进行介绍:
柱图(区别于上文 3 中的柱状图)
由于涉及到个人信息,本文中的部分账户名称及金额已进行处理,并且基于收入的报表由于与支出原理一样,所以会有部分省略。
总体财务状况
每个人的必修报表之一就是有多少钱。你可以在 MoneyWiz 的「账户」中查看这类报表,其中包含了「净值」「结余走势」和「现金流」三种报表。
总资产基于时间维度的走势
不管你对记账的期望是什么,永远都基于有钱花的基础。在净值中你可以看到一段时间内你所有钱的走势图:对于全日制上学的我来说,折线每走高一次——我妈又给我打生活费了(浓浓的惭愧?)。
以账户为单位的资产基于时间维度的走势
原理与净值一样,唯一不同的是可以对账户分别查看,选择某一个或某几个账户查看走势。(请各位扪心自问,一年中余额宝账户是不是在 11 月会骤降?)
如果选择了多个账户,在报表已经生成的情况下,还可以通过点击相应账户名称的方式隐藏或显示该账户,很明显,账户2 几乎被我弃用了。
单位时间内收入与支出的对比
如果你想知道在一段时间内是赚得多还是花的多,那么可以用「现金流」进行收入与支出(MoneyWiz 译为费用)的柱图对比。如果以周为计量单位,月光族的报表一定是第一周红与绿两个柱图顶天而立,后三周只能看见逐步走低的红色支出——就像我高中某老师一样,月初抽中华,月末点秦淮。
钱花到哪里
必修之二就是钱花到哪去了。我们经常会有「我没怎么消费为啥钱就没有了」的困惑,然后在这类报表中一统计,哦,钱都被积少成多地买买买完了。
比较支出类别
各分类支出情况及其占比
到现在为止,我已有两年的记账习惯,这项报表仍是使用频率最高的一项。MoneyWiz 提供了柱图和饼状图两种形式让你查看具体消费情况。
选择柱图时,你不仅可以对比各分类之间的关系,还可以通过点击一级分类对二级分类进一步查看;选择饼状图时,一级与二级分类在同一张图表中显示。
比较收入类别
各分类收入情况及其占比
收入与支出原理一样,同样是可以通过柱图和饼状图两种形式进行报表输出。
支出类别走势
单项/多项支出走势图
如果你想了解某一具体分类的支出情况,就可以在里查看走势图。比如:我到底是冬天吃得多还是夏天吃得多?还是根本就是越吃越多?
除了自定义总体时间维度,你还可以缩小时间单位进行更精确地观察。下图就是以「周」为单位进行了为期三个月的对比。
收入类别走势
单项/多项收入走势图
收入与支出原理一样,你可以用它知道你老板/老公/老妈给你的钱有没有越来越多。
品牌消费喜好
以上两种报表能满足初级统计需求,而选修项目的使用与否就是因人而异了,一方面是看你有这有这方面需求,另一方面也要看你的记账 App 支不支持。
MoneyWiz 在记账过程中可以让你选择使用「交易对象」,并基于此生成品牌消费集中度的报表,也就是说,你经常跟哪些商家进行交易。
比较支出收款人
各支出收款人统计及其占比
这时候就能看出专业记账 App 的强大之处了。我们在抱怨 MoneyWiz 记账速度太慢的时候,应该保持一颗平常心——毕竟它记录的也多,没有统计数据的输入,哪来的数据分析输出?
饼状图告诉我,这 3 个月给 Apple 交的份子钱最多(精神食粮,买了个 iPad Pro),其次是 W 超市(物质食粮,胖了 5 斤),剩下的各个品牌都或多或少有部分消费。除此之外你还可以选择柱图,然而……统计图并不是很友好。
比较收入收款人
各收入收款人统计及其占比
与支出收款人原理一样,你可以用它知道你老板/老公/老妈哪一位给你的钱最多。
支出收款人走势
单个或多个支出收款人走势图
假如我想知道在一段时间内在某个特定品牌上的花费情况,就可以选择支出收款人走势。我把前三月在 W 超市上花的钱分解成以「周」为单位。可以看出来我第 13 周花了最多,第 15 周没去超市,平均一周花销在 $40 左右。
收入收款人走势
单个或多个收入收款人走势图
与支出类似,这项报表可以让你了解例如「XX 宝今年让我赚了多少钱」。
高阶管理——预算
作为选修之二的预算管理,对控制我们的消费欲望上(真的)有一定帮助(吗)。现在,越来越多的 App 开始提供预算功能,通过它你可以看到预算的消费情况和走势。
单项预算占总预算之比
当你设置了 2 个及以上的预算时,就可以在这里看到消费情况的饼状图。
为什么是 2 个及以上?因为这项报表并不是基于「实际支出/总预算」,而是「单项实际支出/总实际支出」。
你在说什么?
来,这么说:5 月份我在小 3 和小 4 上一共花了 $46.84,这其中小 3 占了 35.97%,小 4 占了 63.03%,至于原预算?对不起这里看不到。
那请问要你有什么用?
息怒,看起来这确实一点都不够人性化,毕竟我们对预算报表的第一需求就是想知道花的占了计划的多少。
那该怎么办?两个方法:当月的花费情况可以在「预算」中直接查看,但只能查看实时讯息,而超过当天后,就只能看到第二天的占比情况了(小 4 花超了……)。
而事后若想看怎么办?用下一项报表:结余走势。
单项预算消费金额与总预算对比
当我们满心欢喜到这儿来看之前的预算消费情况图时,然而并不能如愿地看到占比图。为什么是对比而不是占比?原因很简单,一旦不小心(总是)超出预算,饼图便立刻失去了意义。
所以,结余走势是以柱图的形式、将预算金额(绿)与实际消费金额(红)进行对比。
嗯我知道,三月超了。
我在前文提到,2+2 已经能覆盖大部分人的需求,但这并不代表其他报表就没有存在的意义,只是说使用需求并不频繁。
强大的 MoneyWiz 除了以上介绍的四种报表之外还提供了一些小众的需求,可以自爱特定的场景下使用。
最全面的文字报表
「统计」以文字的形式提供了非常全面的信息。你可以在这里了解:
支出与收入各种平均值;
前 5 项大额支出及收款人;
最高收入项及付款人;
各项净值;
以及各项交易数。
收益和亏损
文字形式的收入与支出分析
个人觉得,这项分析的实际意义并不大,我平时也很少用到。简单来说就是:基于某些账户下的收入与支出的文字报表,与图表形势唯一的不同就是,在报表的最后 MoneyWiz 会给出净值。
如果我微信零钱今年只收了$59.06 的红包,然而这一年给 5 个人发红包一共花了$750.17,所以在零钱找个账户下,我的净亏损是 $750.17-$59.06= -$691.11。
自定义报告
以上所有功能的入口
如果你对 MoneyWiz 的报表功能已经了如指掌而又不想在以上诸多选项中找半天才选到你想要的那一个,那么「自定义报告」就是最好的选择。
你可以在这里选择想要的报表形式、所涉及到的账户、想要的图表类型与时间范围等。
以上就是 MoneyWiz 的全部报表种类,除此之外还有 2 个值得一提的功能:预测和报表保存。
在每一个单项报表中,MoneyWiz 都提供了预测功能,理论上是基于过去消费统计规律的基础上进行未来走势的分析。以「净值」为例,左图为前 3 个月的实际净值走势图,右图为未来 6 个月的预测图:
个人认为该功能的实用性仅基于有规律可循的报表中,比如总金额的走势(净值),若想预测的项目是随机性较强、没有任何规律的话,那么就会出现这种情况:
第二个值得提的功能就是报表保存,所有已输出的报表都提供了 3 种保存方式:本地保存、CSV/PDF 格式导出、打印。如果你选择本地保存,则可以将输出的报表单独保存在 MoneyWiz 的报表这一选项中。
当你在记账需求上已经不仅仅满足于「记录」帐目时,统计分析报表就是你的下一步,通过它们你能得出:
你有多少钱;
钱花到哪里去了;
给哪些商家交银子交的最多;
制定的预算实际使用情况如何;
想要真正系统地得出结果,首先要做的就是记好每一笔账,记住,是每一笔。
其次,每月进行统计的时候,都有必要将那些自己并不知道,但实际发生了的账务进行添加梳理,比如每月月末的银行利息收入、部分账单的直接扣款支出。
另外,在将这些账务处理过了之后,最重要的就是进行余额调整:你永远不可能一分钱都不会记错。定期的余额调整能保证帐目的准确性,并且能减少挫败感的产生——如果每次看账户余额都不对,还有什么动力继续记账?
在处理完这一系列步骤之后,就可以按时输出报表了。前文已经提到过报表统计最佳的时间周期是基于工资发放周期,将统计数据按照会计理论上的周期划分是最科学的。
最后,还记得文章开头的这句话吗?
如果你没有哪怕一丁点的自制力,报表对你没有用。
工具永远都是工具,怎样转换成效用,永远取决于个人。
关联阅读:
评论(${commentLength})
请勾选举报理由
${ item.text }
0" v-cloak>
${ related.released_at * 1000 | friendlyTime }
${related.summary}
${ related.likes_count }
根据国家网信办规定,互联网账号需要实名认证。验证手机号码再进行评论或撰写文章。
点击去验证有收入,欠款,支出,余额这样做电子表格怎么做_百度知道
有收入,欠款,支出,余额这样做电子表格怎么做
我有更好的答案
嗯,按思路做一份就行,,jia 77'6'8''5''4'7''9/6
为您推荐:
其他类似问题
电子表格的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。sql 财务报表,mysql 怎么让昨日的余额,变成今天刚开始的余额_百度知道
sql 财务报表,mysql 怎么让昨日的余额,变成今天刚开始的余额
如题,在做一张报表 但是不知道怎么弄 才能让上一条的zongji,等于下一条的qichu 有没有大神 sql怎么写
我有更好的答案
SELECT qichu FROM biao WHERE time=&昨天的时间&;UPDATE biao SET qichu='上一条查询到的值' WHERE time=&今天的时间&
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
因为第一次做相关业务,所以经验不足,想来取点经。1.用户余额表除了用户id和余额还应该有哪些字段?2.收入表和支出表是分开好还是合并?3.比如注册送100优惠券这种场景。注册成功后给余额字段加100,给明细表添加一条记录,这2个步骤放在一个事务中,还是明细表用消息队列处理等其他解决方案。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
就此补充下:优惠券可以单独一张记录表,注册成功券跟用户关联,余额字段不需要更动了。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1.用户ID,余额,开始时间(创建时间),最后交易(收入,支出)改变时间,收入总额,支出总额(看情况决定是否冗余,冗余为了避免每次统计都要查库)2.收入表和支出表看情况。如果收入来源和支出方式都有多种,适合分开,比如说收入(1.打赏,2充值,3转账),支出(1购买业务,2充值会员, 3转赠)等等3.放在一起直接事务也可,消息队列也行,只要涉及金钱,打好日志即可。因为送钱和明细表操作都不是耗时间操作。4.金钱计算,尽量避开浮点数,如1元应该存成100分
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 财务收入支出情况说明 的文章

 

随机推荐