mysql - 如何在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 |
|----|------|------|------|------|------|------|------|
好的,根据上表。我的目标是查看传入订单的成本。
例如。
- 12 个单位的订单 p1。所以每单位的价格是 100。因为他在
buy1
和之间购买buy2
- B 为 15 个单位订购 p1。然后他得到了每单位 100 以及 A。
- C 为 25 个单位订购 p1。他得了 70 分,因为它介于
pay2
和之间pay3
。
我能想到的是比较两列之间的顺序。所以我的代码是:
select * from pay_level where order between buy1 and buy2 and type='p1'
但是当订单超过 20 (of buy2
) 时就会出现问题。我知道我的英语不好,解释得不够清楚。希望你能理解。
解决方案
您需要一个 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'
推荐阅读
- xml - 我想读取一个 xml 文件,但它在 < 之前包含一个“-”
- spring - 使用 togglz 实现基于环境(dev、qa、prod)的特性标志
- python-3.x - 如何根据 if-else 条件对字符串列表进行切片直到匹配字符串的索引
- node.js - 如何解决:无法读取节点 js 中未定义的属性“keycloak-token”?
- scala - 向数据框火花中的列添加时间间隔
- firebase - 查找哪个帐户拥有 Google Cloud 项目?
- centos - 目录已存在时的符号链接
- apache-kafka-streams - 在 JMX 中找不到 Kafka Streams 2.3.0 存储获取率指标
- java - 如何通过java从excel文件中删除空白列?
- html - 溢出-y:自动不使用鼠标滚轮,仅在滑动滚动条时