mysql - 如何选择给定数量在层或范围内的行?
问题描述
假设您有一张表格,将单位价格与数量范围或数量相匹配:
数量 | 每单位价格 | 描述 |
---|---|---|
1 | 50 美元 | 适用于数量 1-9 |
10 | 25 美元 | 适用于数量 10-49 |
50 | 15 美元 | 适用于数量 50-99 |
100 | 10 美元 | 适用于数量 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
解决方案
以下是如何通过对它们进行排序并仅获取一行来做到这一点:
SET @qty := 12;
SELECT
quantity,
pricePerUnit
FROM prices
WHERE quantity <= @qty
order by quantity desc
limit 1
推荐阅读
- angular - ng2-smart-table 行索引
- angular - 如何用echarts收听地图缩放?
- hyperledger-fabric - 超级账本结构中同一组织的多个 MSP
- c - 如何在数组中使用 fprintf?
- java - 如何在Excel中下推现有数据并使用java插入新数据POI
- javascript - 使用嵌入标签和javascript的多个音频html:当前播放时自动停止其他人
- excel - “刷新全部”的excel遵循什么顺序
- angular - Angular 5将数据从一个组件中的表传递到另一个组件
- sitecore - Sitecore 与 iis 表单身份验证和编码基本身份验证
- c# - ASP.NET Core 2.1 错误?两因素身份验证 (2FA)