df-drills pandas · Polars · DuckDB SQL · DuckDB Relational 题目列表 登录

用 indicator 对账

中等 22-pandas-only pandas 专属 mergeindicatorreconciliationcategorical

把公司账本 ledger 和银行流水 bank 按交易号 txn_id 对账,统计每种对账状态的交易数。

每个 txn_id 归入下面四种状态之一:

  • matched:两边都有,且金额相等
  • amount_mismatch:两边都有,但金额不等
  • ledger_only:只在账本里出现
  • bank_only:只在银行流水里出现

要求:

  • 四种状态都要输出,某种状态没有交易时 n 为 0。
  • 两张表里 txn_id 各自唯一,且不为 null;amount 不为 null。金额直接比较是否相等即可。

输入

  • ledger(txn_id, amount)
  • bank(txn_id, amount)

输出

列为 status, n,正好 4 行,行顺序不限。

输入表 (case base,共 2 个 case:base、clean)

ledger local/base/ledger
#txn_idstringamountfloat64
1 T001 120.0
2 T002 75.5
3 T003 300.0
4 T004 42.0
5 T005 18.9
6 T006 500.0
7 T007 66.6
8 T009 10.0
共 8 行
bank local/base/bank
#txn_idstringamountfloat64
1 T001 120.0
2 T002 75.0
3 T003 300.0
4 T005 18.9
5 T006 505.0
6 T008 99.0
7 T010 12.0
8 T011 7.5
9 T009 10.0
共 9 行

期望输出 (case base,行顺序不限)

#statusStringnInt64
1 matched 4
2 amount_mismatch 2
3 ledger_only 2
4 bank_only 3
共 4 行