假设我有 产品:
folio price quantity
1 100.00 1
1 450.00 2
3 150.00 1
4 600.00 2
条款:(了解根据产品价格的付款条款数量)
level term
0.01 12
100.00 14
200.00 16
300.00 18
400.00 20
500.00 22
如何获得这样的结果表:
folio price quantity term
1 100.00 1 14
1 450.00 2 20
我尝试过使用:
SELECT a.*, b.term
FROM products AS a
JOIN terms AS b ON b.level <= a.price
WHERE a.folio = 1
但我最终得到了:
folio price quantity term
1 100.00 1 12
1 100.00 1 14
1 450.00 2 12
1 450.00 2 14
1 450.00 2 16
1 450.00 2 18
1 450.00 2 20
我能做什么,所以我只得到最大的一行?请帮忙!
答案 0 :(得分:1)
您正在寻找条款表中的一行,而不是所有这些行。一种方法是使用相关子查询:
SELECT p.*,
(select t.term from terms t where p.price >= t.level order by t.level desc limit 1
) as term
FROM products p
WHERE p.folio = 1;
如果您可以修改条款表以获得最低和最高价格,那么这将使用户更容易。
并且,您可以使用lead()
函数模仿:
select p.*, t.term
from products p left outer join
(select t.*, lead(level) over (order by level) as nextlevel
from terms t
) t
on p.price >= t.level and (p.price < t.nextlevel or t.nextlevel is null)
where p.folio = 1;