MYSQL根据Case语句和其他行值计算列值
我是MYSQL的新手,所以很抱歉问这个问题,但我不知道从哪里开始 我有一个mysql表,如下所示 表1MYSQL根据Case语句和其他行值计算列值,mysql,case,Mysql,Case,我是MYSQL的新手,所以很抱歉问这个问题,但我不知道从哪里开始 我有一个mysql表,如下所示 表1 Record_ID Price Price_Difference New_Value 1 100 null 2 101 1 3 115 14 4 135 20 5 95 -40 6 80 -15 我要做的是添
Record_ID Price Price_Difference New_Value
1 100 null
2 101 1
3 115 14
4 135 20
5 95 -40
6 80 -15
我要做的是添加并输入null的记录1,因为没有价格差异
对于记录2,我希望'New_Value'是14的价差值除以依赖于前一记录1中价格的值
e、 g.14/@var_1
在哪里
@var_1 = (case
when price_1 < 50 then 0.5
when price_1 between 50.001 and 100 then 1
when price_1 between 100.001 and 150 then 1.25
when price_1 between 150.001 and 150 then 1.4
....etc.
end case
@var_1=(大小写)
当价格_1<50时,则为0.5
当价格_1介于50.001和100之间时,则为1
当价格_1介于100.001和150之间时,则为1.25
当价格_1介于150.001和150之间时,则为1.4
等
终局
我想这可以在MYSQL中实现,我想我该怎么做呢?这可以通过连接同一个表的两个别名来实现,其中一个指向当前的
记录ID
,另一个指向前一个记录ID
,方法是在连接条件中向其添加1
只有当记录_ID
的行被保证是连续的且没有中间的间隙时,这才有效
SELECT
pcur.Price,
pcur.Price_Difference,
CASE
WHEN plast.Price < 50 THEN (pcur.Price_Difference / 0.05)
WHEN plast.Price BETWEEN 50.001 AND 100 THEN (pcur.Price_Difference / 1)
WHEN plast.Price BETWEEN 100.001 AND 150 THEN (pcur.Price_Difference / 1.25)
WHEN plast.Price BETWEEN 150.001 AND 200 THEN (pcur.Price_Difference / 1.4)
ELSE 999 # don't forget your else case
END AS var_1
FROM
/* First aliased table is the current record */
prices pcur
/* Second aliased table is the previous one, whose id is one behind */
LEFT JOIN prices plast ON (pcur.Record_ID = plast.Record_ID + 1);
这里是这个的一个演示:这可以通过连接同一个表的两个别名来完成,其中一个指向当前的
记录ID
,另一个指向前一个记录ID
,方法是在连接条件中向其添加1
只有当记录_ID
的行被保证是连续的且没有中间的间隙时,这才有效
SELECT
pcur.Price,
pcur.Price_Difference,
CASE
WHEN plast.Price < 50 THEN (pcur.Price_Difference / 0.05)
WHEN plast.Price BETWEEN 50.001 AND 100 THEN (pcur.Price_Difference / 1)
WHEN plast.Price BETWEEN 100.001 AND 150 THEN (pcur.Price_Difference / 1.25)
WHEN plast.Price BETWEEN 150.001 AND 200 THEN (pcur.Price_Difference / 1.4)
ELSE 999 # don't forget your else case
END AS var_1
FROM
/* First aliased table is the current record */
prices pcur
/* Second aliased table is the previous one, whose id is one behind */
LEFT JOIN prices plast ON (pcur.Record_ID = plast.Record_ID + 1);
这里有一个演示:你的
记录ID
是否总是保证顺序有序,没有间隔?它们应该总是顺序有序的,但理论上可能有间隔,虽然在这种情况下没有。那么我下面的第二个查询应该可以工作。你的记录ID
是否总是保证顺序有序顺序中没有间隙吗?它们应该始终是连续的,但理论上可能有间隙,虽然在本例中没有。那么我下面的第二个查询应该可以工作了。@user2676706非常欢迎,欢迎使用堆栈溢出。@user2676706非常欢迎,欢迎使用堆栈溢出。