首页 > 解决方案 > 如何在mysql中找到给定数字的范围

问题描述

我想检查数字的范围/级别。我有购买和支付表。只有我能想到的就是介于两者之间。但是在这里,情况有所不同,因为该列不仅是最小值和最大值。

pay_level

| id | type | buy1 | pay1 | buy2 | pay2 | buy3 | pay3 |
|----|------|------|------|------|------|------|------|
| 1  |  p1  |  10  | 100  |  20  |  80  |  30  |  70  |
|----|------|------|------|------|------|------|------|
| 2  |  p2  |  10  | 100  |  20  |  80  |  30  |  70  |
|----|------|------|------|------|------|------|------|
| 3  |  p3  |  5   | 500  |  10  | 400  |  30  | 300  |
|----|------|------|------|------|------|------|------|

好的,根据上表。我的目标是查看传入订单的成本。

例如。

我能想到的是比较两列之间的顺序。所以我的代码是:

select * from pay_level where order between buy1 and buy2 and type='p1'

但是当订单超过 20 (of buy2) 时就会出现问题。我知道我的英语不好,解释得不够清楚。希望你能理解。

标签: mysql

解决方案


您需要一个 CASE 表达式来导航此表达式,因为您无法在 sql 中动态引用数据库对象(表、列等)。

我认为像下面这样的事情会让你进入球场:

SELECT
 CASE WHEN order BETWEEN buy1 and buy2 THEN pay1
      WHEN order BETWEEN buy2 and buy3 THEN pay2
      WHEN order > buy3 THEN pay3 END as cost
FROM pay_level
WHERE type = 'p1'

推荐阅读