我需要将两个表中的值相乘并对结果求和。该数据库是 Postgres 或 MSSQL(长篇大论)。
桌子Bought_Products
ID | Name | Customer_ID | Product_ID | Foo | Bar | Blarg
1 | test | 123 | 321 | NULL| 1 | NULL
2 | tast | 123 | 231 | 5 | NULL| 20
3 | tost | 456 | 321 | NULL| 3 | NULL
桌子Price
ID | Item | Product_ID | Cost
1 | Foo | 321 | 10
2 | Bar | 321 | 5
3 | BASE | 321 | 100
4 | BASE | 231 | 50
5 | Blarg| 231 | 0.5
6 | Foo | 231 | 1
我需要这样的结果:
Customer | Products | Revenue
123 | 321, 231 | 170
对于客户 123,有 2 个产品:321 和 231,底价分别为 100 和 50;在 5 时加上 1 个“酒吧”项目;在 1 处加上 5 x 'Foo' 物品;和 20 个 0.5 的“Blarg”项目。
这就是我的开始:
select sum(p.cost) from price p
join Bought_Products bp on bp.product_id = p.product_ID
where p.item = 'BASE'
我需要将相关的 'Foo'、'Bar' 或 'Blarg' 值Bought_Products
与各自相乘Price.Cost
(将列标题与项目匹配)。
我还没有在 SQL 中使用过基本的数学函数。我不确定如何在 2 个表之间加入,然后将值相乘。使用子查询和后续连接?
此查询为表中的每个客户生成您想要的结果:
db<>在这里摆弄
我们只需要加入一次。魔术发生在
CASE
表达式中,取决于Item
.LEFT [OUTER] JOIN
即使没有任何匹配的价格行,我也会将每个产品都保留在结果中。用于[INNER] JOIN
删除那些。和/或激活注释WHERE
子句以达到相同的效果。ID 1
顺便说一句,表格中的行很Price
突出,因为相关的行Bought_Products
有Foo IS NULL
。关系设计似乎有点神秘。我希望你有充分的理由。