gpt4 book ai didi

mysql - SQL - 将列值设置为与公共(public) id 匹配的不同行的值的差异

转载 作者:行者123 更新时间:2023-11-29 19:04:48 26 4
gpt4 key购买 nike

我有一个包含以下列的表格:

 // zip // date_qtr // vac_ratio // vac_change // 
100 12_2016 0.56 NULL
101 12_2016 0.44 NULL
100 9_2016 0.38 NULL
. . .
. . .
101 9_2016 0.12 NULL

我想找到每个 zip 每个季度的 vac_ratio(相对于前几个季度的 vac_ratio)的变化。所以基本上对于表中的每一行 date_qtr => 12_2016

vac_change(新列)= (vac_ratio(12_2016 和 zip=z1) - vac_ratio (9_2016 和 zip=z1))/vac_ratio (9_2016 和 zip=z1)

我可以使用 JOIN 获取 vac_change 值,但我发现更新 vac_change 列很困难。

UPDATE  h0 SET h0.vac_change= a0.vac_change FROM hud_vacancies h0 JOIN 
(SELECT h1.zip,h1.date_qtr,((h1.vac_ratio - h2.vac_ratio)/h2.vac_ratio ) AS vac_change
FROM hud_vacancies h1 JOIN hud_vacancies h2 ON h1.zip = h2.zip
WHERE h1.date_qtr LIKE '12_2016' and h2.zip LIKE '9_2016')a0 ON h0.zip = a0.zip WHERE h0.date_qtr LIKE '12_2016'

我收到 SQL 语法错误,但我不明白问题出在哪里。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM hud_vacancies h0 JOIN (SELECT h1.zip,h1.date_qtr,((h1.vac_ratio - h2.vac_r' at line 1

我的sql脚本类似于提供的解决方案here 。我希望问题很清楚,如果需要更多信息,请告诉我。

编辑:根据 @Gordon 给出的输入,我尝试了不使用 FROM 运算符的脚本变体。现在它不会给我语法错误,但它也不会设置列。列仍然为 NULL,并且没有行受到影响。这是修改后的代码。

UPDATE  hud_vacancies h0 
JOIN
( SELECT h1.zip
, h1.date_qtr
, ((h1.vac_ratio - h2.vac_ratio)/h2.vac_ratio ) vac_change
FROM hud_vacancies h1
JOIN hud_vacancies h2
ON h1.zip = h2.zip
WHERE h1.date_qtr LIKE '12_2016'
and h2.zip LIKE '9_2016'
) a0
ON h0.zip = a0.zip
SET h0.vac_change = a0.vac_change
WHERE h0.date_qtr LIKE '12_2016'

PS:我很抱歉,因为我知道标题在我尝试计算变化率时提到了差异,但我试图保持通用标题,并且在差异和变化率计算的实现上存在细微差别.

最佳答案

我的查询中有一个小错误,导致无法更新任何行的问题。我应用了 where 子句 h2.zip LIKE '9_2016' 而不是 h2.date_qtr LIKE '9_2016'。

感谢 Gordon、Strawberry 和 Eric 的投入。

这是更正后的工作查询。

UPDATE  hud_vacancies h0 JOIN 
(SELECT h1.zip,h1.date_qtr,(h1.vac_ratio - h2.vac_ratio) AS vac_change
FROM hud_vacancies h1 JOIN hud_vacancies h2 ON h1.zip = h2.zip
WHERE h1.date_qtr LIKE '12_2016' and h2.date_qtr LIKE '9_2016')
a0 ON h0.zip = a0.zip
SET h0.vac_change= a0.vac_change WHERE h0.date_qtr LIKE '12_2016'

关于mysql - SQL - 将列值设置为与公共(public) id 匹配的不同行的值的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43593726/

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