如何在 SQL 查询中为方程定义变量
How to Define Variable for an Equation in SQL Query
我是 SQL 新手,我正在尝试查询在线数据库中的一个子集。我知道我感兴趣的数据受使用两列的方程式的限制,我想查询方程式。
如果我每次想绑定它时都重复计算,查询有效,但我想通过将方程保存为变量来节省执行时间。
这是通过重复等式运行的代码:
SELECT *
FROM online_database
WHERE rnn < 8
AND mol > 12
AND 1 + 0.5*rnn + 0.1*mol < 6
AND 1 + 0.5*rnn + 0.1*mol > 0.2
这是我正在尝试做的事情的近似值(这不起作用):
SELECT *
FROM online_database
WHERE rnn < 8
AND mol > 12
AND (1 + 0.5*rnn + 0.1*mol) as eqt < 6
AND eqt > 0.2
非常感谢任何建议!
您可以创建一个计算列,
或者应该创建一个列并设置 insert/update 触发器来计算值(这样你可以根据需要在结果中创建索引)
或者创建一个包含公式值的列的视图,
或者创建一个通用的table表达式,
with cte as (select *, 1 + 0.5*rnn + 0.1*mol as computed
from (values (0.01, -10), (0.5, 0.2), (10, 20) ) as V (mol, rnn))
select * from cte
where computed < 6
and computed > 0.2
或者以一种不太漂亮的方式,你可以使用外部应用
select *
from (values (0.01, -10), (0.5, 0.2), (10, 20) ) as V (mol, rnn)
outer apply (select (1 + 0.5*rnn + 0.1*mol) as computed_value) as calc
where calc.computed_value < 6
and calc.computed_value > 0.2
看工作fiddle
使用外部应用和 cte 示例
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=bf8f93681ca90fad4c585e23bcf3b463
我是 SQL 新手,我正在尝试查询在线数据库中的一个子集。我知道我感兴趣的数据受使用两列的方程式的限制,我想查询方程式。
如果我每次想绑定它时都重复计算,查询有效,但我想通过将方程保存为变量来节省执行时间。
这是通过重复等式运行的代码:
SELECT *
FROM online_database
WHERE rnn < 8
AND mol > 12
AND 1 + 0.5*rnn + 0.1*mol < 6
AND 1 + 0.5*rnn + 0.1*mol > 0.2
这是我正在尝试做的事情的近似值(这不起作用):
SELECT *
FROM online_database
WHERE rnn < 8
AND mol > 12
AND (1 + 0.5*rnn + 0.1*mol) as eqt < 6
AND eqt > 0.2
非常感谢任何建议!
您可以创建一个计算列,
或者应该创建一个列并设置 insert/update 触发器来计算值(这样你可以根据需要在结果中创建索引)
或者创建一个包含公式值的列的视图,
或者创建一个通用的table表达式,
with cte as (select *, 1 + 0.5*rnn + 0.1*mol as computed
from (values (0.01, -10), (0.5, 0.2), (10, 20) ) as V (mol, rnn))
select * from cte
where computed < 6
and computed > 0.2
或者以一种不太漂亮的方式,你可以使用外部应用
select *
from (values (0.01, -10), (0.5, 0.2), (10, 20) ) as V (mol, rnn)
outer apply (select (1 + 0.5*rnn + 0.1*mol) as computed_value) as calc
where calc.computed_value < 6
and calc.computed_value > 0.2
看工作fiddle 使用外部应用和 cte 示例
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=bf8f93681ca90fad4c585e23bcf3b463