gpt4 book ai didi

mysql - 如何在 MySQL 中运行求值表达式并相应地更新列?

转载 作者:行者123 更新时间:2023-11-29 08:49:57 25 4
gpt4 key购买 nike

我有下表:

tweets                                     stocks
------------------------------------- -----------------------------
id stock_id nyse_date class quality stock_id _date return
------------------------------------- -----------------------------
1 1 2011-03-12 3 1 2011-03-12 0.44
2 1 2011-03-12 1 1 2011-03-15 0.17
3 1 2011-03-15 2 2 2011-03-15 -0.03
4 2 2011-03-15 2
5 2 2011-03-16 1

我需要仅使用 SQL 计算以下表达式并在 quality 列中填写结果:

IF (class_value of tweet/return on that day) > 0 THEN quality = 1 ELSE 0

class_value 为:

IF class = 1 THEN class_value =  0
IF class = 2 THEN class_value = 1
IF class = 3 THEN class_value = -1

对于每条推文,我(显然)需要获取该日期的股票 yield 。在周末,例如 2011-03-16,没有可用的库存数据。在这种情况下,quality 也应默认为 0(并且不返回错误)。因此,让我们对示例中的 4 条推文手动执行此操作:

id  class  class_value  return  class_value/return  quality
-----------------------------------------------------------
1 3 -1 0.44 -1/0.44 = -2.27 0
2 1 0 0.44 0/0.44 = 0 0
3 2 1 0.17 1/0.17 = 5.88 1
4 2 1 -0.03 1/-0.03 = -33.33 0
5 1 0 n/a 0

因此查询的最终结果将是更新的 tweets 表:

tweets                               
-------------------------------------
id stock_id nyse_date class quality
-------------------------------------
1 1 2011-03-12 3 0
2 1 2011-03-12 1 0
3 1 2011-03-15 2 1
4 2 2011-03-15 2 0
5 2 2011-03-16 1 0

我不知道如何将所有这些放入查询中。我现在有了这个,但它只选择类并返回,但不设置 class_value 或实现表达式。

UPDATE tweets SET quality = (
SELECT t.class, s.return FROM tweets t
LEFT JOIN stocks s ON t.nyse_date = s._date
)

非常感谢任何帮助:-)

最佳答案

update tweets
set quality = ifnull(case tweets.class
when 1 then 0
when 2 then 1
when 3 then -1
end
-- If there is no match, subquery will evaluate to null
-- Division will also evaluate to null
/ (select `return`
from stocks
where tweets.nyse_date = stocks._date
and tweets.stock_id = stocks.stock_id
)
-- If there was no match, quality = 0
, 0)
-- Shortcut to set 1 if condition is satisfied
-- If there is an error try encapsulating
-- whole expression into case when (ex) then 1 else 0 end
> 0

我想对此进行测试,因为我没有使用 MySql,但我最喜欢的 Sql Fiddle 目前已关闭。

关于mysql - 如何在 MySQL 中运行求值表达式并相应地更新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11540700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com