Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL查询中为方程定义变量_Sql_Naming Conventions_Query Performance - Fatal编程技术网

如何在SQL查询中为方程定义变量

如何在SQL查询中为方程定义变量,sql,naming-conventions,query-performance,Sql,Naming Conventions,Query Performance,我是一个SQL新手,我正在尝试查询在线数据库中的子集。我知道我感兴趣的数据是由一个使用两列的方程所限定的,我想查询这个方程 如果每次我想绑定它时都重复计算,查询就可以工作,但我想通过将等式保存为变量来节省执行时间 下面是通过重复公式工作的代码: SELECT * FROM online_database WHERE rnn < 8 AND mol > 12 AND 1 + 0.5*rnn + 0.1*mol < 6 AND 1 + 0.5

我是一个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触发器来计算值。如果需要,您可以在结果中创建索引

或者创建一个具有公式值的列的视图

或者创建一个公共表表达式

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

看工作小提琴 外涂和cte样品


您使用的是什么数据库管理系统?谢谢!常用的表格表达法效果很好。