记账5年,我用一个 SELECT 语句查出了自己的真实家底

0 阅读4分钟

记账只是 INSERT INTO 流水表,资产负债表才是 SELECT net_worth FROM snapshot

01

我从2019年开始记账。

每笔外卖、每杯奶茶、每次打车,都老老实实记在 App 里。月底还会跑个 SUM(expense) GROUP BY category,看看钱花哪了。

5年下来,SELECT SUM(savings) FROM years 返回了 20 万。

看起来还不错,对吧?

直到有一天,朋友问我:“你家净资产是多少?”

我瞬间 NULL 了。

我知道每月 income - expense = saving,知道基金账户浮亏 8000,知道房贷还剩 80 万……但这些数据分散在各个“数据源”里:银行 App、基金 App、房产中介估值、信用卡账单。从来没有做过一次 JOIN

那天晚上,我决定执行一次全量查询。


02

我打开一个空白文档,定义了两个数组:

javascript

const assets = [
  { name: '活期存款', amount: 50000 },
  { name: '定期存款', amount: 150000 },
  { name: '基金', amount: 42000 },    // 已扣除亏损
  { name: '房产(市值)', amount: 3000000 }
];

const liabilities = [
  { name: '房贷余额', amount: 800000 },
  { name: '信用卡待还', amount: 12000 }
];

然后执行:

javascript

const netWorth = assets.reduce((sum, a) => sum + a.amount, 0) 
                - liabilities.reduce((sum, l) => sum + l.amount, 0);

console.log(netWorth); // 2430000

243 万?我反复跑了三次,确认没有 bug。

可为什么我每个月还是紧巴巴的?这不科学。


03

后来我明白了:记账系统只记录了 transaction log,而资产负债表才是 database snapshot。

记账能回答:SELECT * FROM cash_flow WHERE month = '2026-03'
但它回答不了:

  • SELECT net_worth FROM snapshot ORDER BY date DESC LIMIT 1
  • SELECT asset_allocation_ratio(你的钱是怎么分布的)
  • SELECT liquidity_ratio(有多少钱能随时调用)

我虽然净资产 243 万,但其中 220 万是房产(非流动资产),真正能用于投资或应急的流动资产只有 9 万。

而我的朋友小B,月薪跟我差不多,他的数据是这样的:

javascript

const assets_B = [
  { name: '活期', amount: 30000 },
  { name: '定期', amount: 70000 },
  { name: '基金股票', amount: 300000 }
];
const liabilities_B = []; // 无负债
// netWorth_B = 400000

论净资产,他 40 万 < 我 243 万。但论 流动比率 和 资产配置灵活性,他完胜。

只看存款余额,我比他“有钱”;看资产负债表,他比我从容。

这就是资产负债表的价值——它不只看 SUM(assets),还看你的资产结构、负债率、流动性。


04

从那以后,我建了一张 monthly_snapshot 表,每月底执行一次 INSERT

sql

CREATE TABLE monthly_snapshot (
  snapshot_date DATE PRIMARY KEY,
  net_worth DECIMAL(12,2),
  liquidity_ratio DECIMAL(5,4),   -- 流动资产 / 总资产
  housing_ratio DECIMAL(5,4),     -- 房产 / 总资产
  debt_ratio DECIMAL(5,4)         -- 负债 / 总资产
);

每月底,我会问自己三个问题,并用 SQL 查出答案:

  1. 净值变化
    SELECT net_worth - LAG(net_worth) OVER (ORDER BY snapshot_date) AS delta FROM monthly_snapshot;
    涨跌原因是什么?收入增加?基金反弹?还是房贷还了一部分?
  2. 配置偏离
    我的 target 是:房产 ≤ 50%,基金 ≥ 30%,存款 ≥ 20%。
    实际查询:SELECT housing_ratio FROM monthly_snapshot WHERE snapshot_date = CURRENT_DATE;
    如果超过 55%,触发 rebalance 信号。
  3. 流动性安全
    SELECT liquidity_ratio FROM monthly_snapshot;
    流动资产 < 6 个月生活费?那就先别投资,补安全垫。

这些分析,记账 App 不会帮你做。但你的 monthly_snapshot 表可以。


05

如果你也想给自己的财务系统建一张 snapshot 表,但不想手写 SQL 或维护 Excel,可以用现成的工具。

微信搜索「ReFi理财」小程序,里面有个“家庭资产负债表”模块:

  • 前端 UI 帮你 INSERT INTO assets/liabilities
  • 后端自动 SELECT net_worth, allocation_ratio
  • 每月对比,自动 diff 净值变化
  • 支持设置 target 比例,超出阈值自动提醒

不需要写一行代码,但底层逻辑和你自己建表一模一样。

👉 微信搜索「ReFi理财」→ 家庭资产负债表 → 开始 CREATE TABLE


最后

记账是 tail -f transaction.log,资产负债表是 SELECT * FROM snapshot

两个都有,你才真正拥有家庭财务的可观测性。

今天花 1 小时,给你的财务系统建一个初始快照。然后每月 UPDATE 一次。

你会发现,对钱的掌控感,和写代码一样——可测量、可复盘、可优化


本文为真实经历改编,不构成投资建议。欢迎评论区讨论你的“理财数据结构”。