Mysql根据给定的范围执行速率

Mysql根据给定的范围执行速率,mysql,case,Mysql,Case,我在mysql中有一个下表 CREATE TABLE `mdc_tariff_slabs` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key', `type` varchar(50) DEFAULT NULL, `slab_name` varchar(50) NOT NULL COMMENT 'Name of the Slab', `slab_start` int(50) NOT NULL COMMENT 'Start of

我在
mysql
中有一个下表

CREATE TABLE `mdc_tariff_slabs` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key',
`type` varchar(50) DEFAULT NULL,
`slab_name` varchar(50) NOT NULL COMMENT 'Name of the Slab',
`slab_start` int(50) NOT NULL COMMENT 'Start of the slab',
`slab_end` int(50) DEFAULT NULL COMMENT 'End of the slab',
`rate` varchar(50) NOT NULL COMMENT 'Rate of slab',
`t_id` int(11) NOT NULL COMMENT 'Tariff ID, Foriegn Key',
 PRIMARY KEY (`id`),
 KEY `T_ID` (`t_id`),
 CONSTRAINT `T_ID` FOREIGN KEY (`t_id`) REFERENCES `mdc_tariff` (`id`) ON DELETE CASCADE
 ) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=latin1;

/*Data for the table `mdc_tariff_slabs` */

insert  into `mdc_tariff_slabs`(`id`,`type`,`slab_name`,`slab_start`,`slab_end`,`rate`,`t_id`) values (1,NULL,'S-1',1,100,'10',1),(2,NULL,'S-2',101,150,'12',1),(3,NULL,'S-3',151,NULL,'14',1),(4,NULL,'S-1',1,50,'5',2),(5,NULL,'S-2',51,100,'7',2),(6,NULL,'S-3',101,NULL,'8',2),(52,'WAPDA','S-1',1,100,'12',12),(53,'WAPDA','S-2',101,150,'14',12),(54,'WAPDA','S-3',151,NULL,'16',12),(58,'Generator','S-1',1,100,'17',12),(59,'Generator','S-2',101,150,'20',12),(60,'Generator','S-3',151,NULL,'22',12);
我的生活也是如此

我有一套。在特定
类型的该范围内
我想检查
速率
。假设要检查的值为
40
,类型为
Generator
。因此,如果该值在slab范围
1-100
内,则速率将为
17
,反之亦然

预期产出

 type     |value|rate|
======================
 Generator| 40  |17  |
....
我怎样才能做到这一点


非常感谢您提供的任何帮助。

看起来板可能会重叠,因此您应该选择板值的
MAX
,以确保您正在处理错误数据。这很棘手,因为您已经将
rate
定义为varchar。这就是为什么我在求和之前将其转换为int值。您可能对此仍有问题。我建议改为使用该列的int值

它还看起来像
slab\u end
可以是
NULL
,表示没有结束,因此简单的
介于
之间的条件对您的情况不起作用。我用
条件处理它

我会这样做:

SET @value = 40;
SET @type = 'Generator';

SELECT @type AS type,
    @value AS value,
    MAX(CAST(rate AS UNSIGNED)) AS rate
FROM mdc_tariff_slabs
WHERE type = @type
    AND @value >= slab_start
    AND (@value <= slab_end OR slab_end IS NULL);
SET@value=40;
设置@type='Generator';
选择@type作为类型,
@价值即价值,
最大(强制转换(速率为无符号))速率
来自mdc_电价_板
其中type=@type
和@value>=slab\u start

及(@value no我不想求和。我只想得到范围内的比率。如果
type=Generator
并且如果该值介于
1-100
之间,则该比率为
17
,如果该值介于
101-150
之间,则该比率为
20
,如果该比率高于
150
则该比率为
22
,依此类推。)on@FaisalQayyum知道了-编辑了我的回复以解决这个问题