我需要支持 sql 查询

Posted

技术标签:

【中文标题】我需要支持 sql 查询【英文标题】:I need a support for sql query 【发布时间】:2019-05-21 15:45:16 【问题描述】:

我有一个包含 3 列下限、上限、折扣金额的表格 我正在传递一个数字并查找它属于哪个范围并检索其折扣金额 但是我传递了一个不在此表中的数字,在这种情况下我需要表中的最后一个范围折扣金额 我需要一个相同的 sql 查询

 0-10 100 
11-20 200 
21-30 300
如果我通过 5 需要获得 100 如果我通过了 15 200 作为结果 但如果我超过 50,我需要得到 300 作为结果

即。如果传递的值不在范围内,则需要获得最高范围的折扣金额。

请帮忙。见了

【问题讨论】:

请提供样本数据、所需结果和适当的数据库标签。如果表格中有空隙怎么办? 0-10 100 , 11-20 200 , 21-30 300 如果我通过 5 需要获得 100 ,如果我通过 15 200 结果,但如果我通过 50 我需要获得 300 使用该信息编辑问题。要格式化为code,请选择文本并按ctrl-k 或在每行前添加4 个空格 发布到目前为止您编写的脚本。这将有所帮助,因为您已经获得了初始两个范围的正确输出。 【参考方案1】:

试试这个。您也可以在脚本中直接传递/使用@value。

DECLARE @Value INT 
SET @Value = 35

SELECT SUM(DISCOUNT) Discount 
FROM
(
    SELECT 
    CASE 
        WHEN upper_range = (SELECT MAX(upper_range) FROM your_table) AND @Value > upper_range THEN DISCOUNT 
        WHEN @Value BETWEEN  lower_range AND upper_range THEN DISCOUNT 
        ELSE 0 
    END
    DISCOUNT 
    FROM your_table
) A

值 35 的输出是-

300

【讨论】:

【参考方案2】:

使用 UNION ALL:

select discount
from tablename
where x between lowerrange and upperrange
union all
select max(discount) from tablename
where not exists (
  select 1 from tablename
  where x between lowerrange and upperrange
)

如果第一个查询没有返回结果,则该值将由第二个查询获取。 如果第一个查询返回结果,那么第二个查询将不返回任何内容。 适用于任何主要的 rdbms。

【讨论】:

如果给定数字没有范围,那么它将给出最高范围的折扣金额? 它将给出最高的折扣金额(基于您的示例数据)。 select max(discount) from tablename where not exists (select 1 from tablename where x between lowerrange and upperrange ) 你能解释一下这段代码吗? Select 1 的意思 选择1表示存在符合该条件的行。 So not exits.. 表示没有符合该条件的行,在这种情况下获取最大折扣

以上是关于我需要支持 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

hibernate框架之-查询结果集返回类型

spark sql中需要一次传递多个sql查询

pd.read_sql - 不支持的格式字符错误 (0x27)

SQL 查询在 SQL Server CE 中很慢,但在 SQL Server 中很快

多表的慢速 SQL 查询

本机查询支持 SQL Server 的 Spring 数据 jpa 流