首页 > 解决方案 > 如何选择给定数量在层或范围内的行?

问题描述

假设您有一张表格,将单位价格与数量范围或数量相匹配:

数量 每单位价格 描述
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 行?例如:

    SET @qty := 12;
    SELECT
        quantity,
        pricePerUnit
    FROM
        prices
    WHERE
        quantity <= @qty; -- doesn't work, returns rows for both 1 and 10

标签: mysqlsqlselect

解决方案


以下是如何通过对它们进行排序并仅获取一行来做到这一点:

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

推荐阅读