我有3张桌子。
此表用于存储客户的信息
Customers
:
ID Name
1 'Company A'
2 'Company B'
3 'Company C'
此表保存订单日志
Orders
:
ID CustomerID Quantity Date
1 1 200 01/01/2001
2 1 150 01/02/2001
3 2 500 01/02/2001
4 3 200 01/03/2001
5 2 400 01/03/2001
6 3 200 01/04/2001
此表保存价格,我们假设我只销售1个产品,每个客户都有自己的单独价格和这样的总数量
示例:对于客户ID 1,从0到100之间的总数量,然后每个的价格为200
Price
:
CustomerID From To Price
1 0 100 200
1 101 500 190
1 501 ? 180
2 0 150 195
2 151 800 180
2 801 ? 170
3 0 400 180
3 401 ? 180
我希望我的输出看起来像这样:
Name TotalQuantity Price
---------------------------------------------
Company A 350 190
Company B 900 170
Company C 400 180
我知道我需要先SUM
Quantity
然后与下面的Price
表进行比较,但我该怎么办呢?我该放什么"?"嗯...例如在Price
表中超过501,801,401?
答案 0 :(得分:0)
您感兴趣的每位客户有两件事:订单总数和相应价格。因此,让我们将这些与客户表联系起来:
select c.id, c.name, p.price
from customers c
join
(
select customerid, sum(quantity) as total
from orders
group by customerid
) o on o.customerid = c.id
join price p on p.customerid = o.customerid and o.total between p.from and p.to;
至于没有上限:存储一些超级巨大的价值,你就完成了。或者存储null并使用和o.total between p.from and coalesce(p.to,o.total)
代替。