【问题标题】:How to select a row where a given quantity falls within a tier or range?如何选择给定数量在层或范围内的行?
【发布时间】: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 - 已经有人用相同的概念回答了
  • 谁投了反对票,你为什么不说明问题的问题?

标签: mysql sql select


【解决方案1】:

您可以通过以下方式对它们进行排序并仅获取一行:

    SET @qty := 12;
    SELECT
        quantity,
        pricePerUnit
    FROM prices
    WHERE quantity <= @qty
    order by quantity desc
    limit 1

【讨论】:

    猜你喜欢
    • 2011-04-01
    • 2011-04-04
    • 2021-08-20
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多