我正在尝试建立一个SQL查询,该查询将获取给定值的最接近的匹配项,当用户输入8000时,我想获取一条最接近8000的记录,一条等于8000的记录以及一条等于8000的记录。级别高于8000。设计数据模型的最佳方法是什么,SQL可以执行此操作,我正在尝试通过单个查询将其最小化,以获取性能,请提出建议。
在下面的示例中考虑此示例,其中Employee是表名,名称是工资,工资是其属性
创建表employee(姓名,工资整数)
这是Employee表的样本数据
Name | salary
----------
Raju 5000
Ram 8000
Sulthan 7000
Aditya 10,000
正如我上面解释的,如果我输入薪水为8000,我想获取一条最接近8000的记录,一条等于8000的记录,以及一条高于8000的一级的记录。
您可以使用窗口函数执行此操作:
select name, salary
from (
select name,
salary,
case
when salary = 8000 then 1
when lag(salary) over w = 8000 then 1
when lead(salary) over w = 8000 then 1
else 0
end as flag
from employee
window w as (order by salary)
) t
where flag = 1;
另一种选择是使用三个查询,然后将它们与 UNION ALL
select name, salary
from employee
where salary = 8000
union all
select *
from (
-- get the highest salary that is lower then 8000
select name, salary
from employee
where salary < 8000
order by salary desc
limit 1
) t
union all
select *
from (
-- get the smallest salary that is higher then 8000
select name, salary
from employee
where salary > 8000
order by salary
limit 1
) t
order by salary;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句