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

多键连接

中等 11-join 连接 joinmulti-keyleftfill-zero

把每天的库存快照和当天的销量对上。

  • 库存表每行是某门店某商品某一天的期末库存;销量表每行是某门店某商品某一天的销量。两张表里 (store_id, sku, date) 都不重复。
  • 只有 store_id、sku、date 三者都相同才算同一条记录。同一个 sku 在别的门店或别的日期的销量不能算进来。
  • 以库存表为准,每条库存记录输出一行;当天没有销量记录的,sold 为 0。只出现在销量表里的记录不输出。

输入

  • inventory(store_id, sku, date, on_hand)
  • sales(store_id, sku, date, qty)

输出

列为 store_id, sku, date, on_hand, sold,其中 sold 是销量表的 qty。行顺序不限。

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

inventory local/base/inventory
#store_idint64skustringdatedateon_handint64
1 1 A100 2026-09-01 40
2 1 A100 2026-09-02 35
3 1 B200 2026-09-01 12
4 1 B200 2026-09-02 12
5 2 A100 2026-09-01 20
6 2 A100 2026-09-02 18
7 2 C300 2026-09-01 7
8 2 C300 2026-09-02 5
共 8 行
sales local/base/sales
#store_idint64skustringdatedateqtyint64
1 1 A100 2026-09-01 5
2 1 A100 2026-09-02 6
3 2 A100 2026-09-01 2
4 2 C300 2026-09-01 1
5 2 C300 2026-09-02 2
6 3 A100 2026-09-01 9
共 6 行

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

#store_idInt64skuStringdateDateon_handInt64soldInt64
1 1 A100 2026-09-01 40 5
2 1 A100 2026-09-02 35 6
3 2 A100 2026-09-01 20 2
4 2 C300 2026-09-01 7 1
5 2 C300 2026-09-02 5 2
6 1 B200 2026-09-01 12 0
7 1 B200 2026-09-02 12 0
8 2 A100 2026-09-02 18 0
共 8 行