【发布时间】:2021-05-21 16:59:46
【问题描述】:
假设您有一张表格,将单价与数量范围或数量层级相匹配:
| Quantity | Price Per Unit | Description |
|---|---|---|
| 1 | $50 | Applies to qtys 1-9 |
| 10 | $25 | Applies to qtys 10-49 |
| 50 | $15 | Applies to qtys 50-99 |
| 100 | $10 | Applies to qtys 100+ |
例如,每件 50 美元的价格适用于商品数量 1-9。如果有 10 件商品,价格变为每件 25 美元,直到 49 件,然后对于 50 到 99 之间的任何商品,价格为 15 美元,任何 100+ 商品的价格为每件商品 10 美元。
如何为任何给定数量选择正确的行,以便给定数量只返回 1 行?例如:
- 数量 1 -> 50 美元
- 数量 2 -> 50 美元
- 数量 12 -> 25 美元
- 等
SET @qty := 12;
SELECT
quantity,
pricePerUnit
FROM
prices
WHERE
quantity <= @qty; -- doesn't work, returns rows for both 1 and 10
【问题讨论】:
-
您可能不会以这种方式构建数据。您将有一个最小数量字段来确定您的价格中断,而不是一个文本字段。但一般你只需要选择前 1 (将你的结果集限制在第一个匹配的行)
-
@Charleh 感谢您的见解。什么是更好的表模式?添加 MinQty 和 MaxQty 列?
-
你只需要
Min Quantity- 已经有人用相同的概念回答了 -
谁投了反对票,你为什么不说明问题的问题?