首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql根据给定的范围执行比率

Mysql根据给定的范围执行比率
EN

Stack Overflow用户
提问于 2020-09-11 12:38:04
回答 1查看 28关注 0票数 0

我在mysql有一张下面的桌子。

代码语言:javascript
复制
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);

在我的SQL Fiddle里也是一样

我有板子范围。在特定type的范围内,我想检查rate。假设要检查的值是40,而typeGenerator。因此,如果该值在1-100范围内,则速率为17,反之亦然。

预期输出

代码语言:javascript
复制
 type     |value|rate|
======================
 Generator| 40  |17  |
....

我怎样才能做到这一点?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-11 12:44:40

看起来板坯可能会重叠,所以您应该选择板条值的MAX,以确保您正在处理不良数据。这很棘手,因为rate被定义为varchar。这就是为什么在求和之前,我要把它转换成一个int值。你可能对此仍有异议。我建议使用该列的int值。

看起来,slab_end也可以是NULL,表示没完没了,所以简单的BETWEEN条件不会适用于您的情况。我用一个OR条件来处理它。

我会这样做:

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63847256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档