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

我是SQL新手,我正在尝试查询在线数据库的子集。我知道我感兴趣的数据受使用两列的方程式限制,并且我想查询方程式。

如果每次要绑定计算时都重复计算,则查询有效,但我想通过将方程式另存为变量来节省执行时间。

以下是重复方程式的代码:

def rearrange_list(input_list,input_item_to_move,input_item_insert_here):
    '''
    Helper function to re-arrange the order of items in a list.
    Useful for moving column in pandas dataframe.

    Inputs:
        input_list - list
        input_item_to_move - item in list to move
        input_item_insert_here - item in list,insert before 

    returns:
        output_list
    '''
    # make copy for output,make sure it's a list
    output_list = list(input_list)

    # index of item to move
    idx_move = output_list.index(input_item_to_move)

    # pop off the item to move
    itm_move = output_list.pop(idx_move)

    # index of item to insert here
    idx_insert = output_list.index(input_item_insert_here)

    # insert item to move into here
    output_list.insert(idx_insert,itm_move)

    return output_list


import pandas as pd

# step 1: create sample dataframe
df = pd.DataFrame({
    'motorcycle': ['motorcycle1','motorcycle2','motorcycle3'],'initial_odometer': [101,500,322],'final_odometer': [201,515,463],'other_col_1': ['blah','blah','blah'],'other_col_2': ['blah','blah']
})
print('Step 1: create sample dataframe')
display(df)
print()

# step 2: add new column that is difference between final and initial
df['change_odometer'] = df['final_odometer']-df['initial_odometer']
print('Step 2: add new column')
display(df)
print()

# step 3: rearrange columns
ls_cols = df.columns
ls_cols = rearrange_list(ls_cols,'change_odometer','final_odometer')
df=df[ls_cols]
print('Step 3: rearrange columns')
display(df)

这是我要执行的操作的近似值(这不起作用):

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

任何建议都将不胜感激!

ZXY199 回答:如何在SQL查询中为方程式定义变量

您可以创建一个计算列

或应创建一列并设置插入/更新触发器以计算值(这样,如果需要,您可以在结果中创建索引)

或使用带有公式值的列创建视图,

或创建公用表表达式,

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,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样品

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=bf8f93681ca90fad4c585e23bcf3b463

本文链接:https://www.f2er.com/2937786.html

大家都在问