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

计算行金额

简单 04-expr 新列与条件表达式 expressionarithmeticNone

为每一行订单明细计算成交金额:

amount = qty × unit_price × (1 − discount)

  • discount 是折扣率(0.1 表示打九折)。discount 为 null 表示没有折扣,按 0 计算;显式的 0 也表示没有折扣。
  • 不做舍入。

输入

  • order_items(order_id, product_id, qty, unit_price, discount)

输出

列为 order_id, product_id, amount,每行明细一行,行顺序不限。

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

order_items shop/order_items
#order_idint64product_idint64qtyint64unit_pricefloat64discountfloat64
1 1001 22 3 298.8 null
2 1001 26 1 190.0 0.1
3 1002 6 2 254.2 0.0
4 1002 9 3 79.0 null
5 1002 19 5 305.1 0.2
6 1003 9 2 79.0 0.1
7 1003 28 2 47.4 0.0
8 1004 5 1 500.0 0.1
9 1005 3 1 89.0 0.0
10 1005 12 4 45.0 null
11 1006 13 1 19.9 0.1
12 1006 25 2 39.9 null
13 1007 27 1 12.5 null
14 1008 3 1 89.0 null
15 1008 16 1 29.9 null
16 1008 17 1 129.0 null
17 1009 2 1 49.9 0.0
18 1009 10 2 42.5 null
19 1009 20 1 84.5 0.05
20 1010 1 1 23.8 0.1
显示前 20 行,共 500 行

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

#order_idInt64product_idInt64amountFloat64
1 1001 22 896.4
2 1001 26 171.0
3 1002 6 508.4
4 1002 9 237.0
5 1002 19 1220.4
6 1003 9 142.2
7 1003 28 94.8
8 1004 5 450.0
9 1005 3 89.0
10 1005 12 180.0
11 1006 13 17.91
12 1006 25 79.8
13 1007 27 12.5
14 1008 3 89.0
15 1008 16 29.9
16 1008 17 129.0
17 1009 2 49.9
18 1009 10 85.0
19 1009 20 80.275
20 1010 1 21.42
21 1010 5 900.0
22 1010 10 50.0
23 1011 2 249.5
24 1011 7 47.595
25 1011 10 50.0
26 1012 2 89.82
27 1012 22 498.0
28 1013 2 224.55
29 1013 24 42.66
30 1013 28 85.32
31 1014 4 170.1
32 1014 7 40.08
33 1015 2 49.9
34 1015 16 29.9
35 1016 6 762.6
36 1016 11 178.2
37 1016 24 31.6
38 1016 25 36.005
39 1016 27 12.5
40 1017 10 180.0
41 1018 17 129.0
42 1018 18 179.1
43 1019 2 99.8
44 1019 13 83.6
45 1019 25 113.7
46 1020 20 76.05
47 1020 29 174.9
48 1021 9 79.0
49 1021 18 995.0
50 1021 19 574.4
显示前 50 行,共 500 行