gpt4 book ai didi

mysql - 如何为sql查询设置列的值?

转载 作者:行者123 更新时间:2023-11-29 13:03:33 25 4
gpt4 key购买 nike

我有两个表xy,我希望将x中的一列设置为y中按公共(public)列分组的列的平均值。

这就是我到目前为止所做的

update
set x.column2 = (SELECT AVG(NULLIF(column2,0))
FROM y group by column1)
on (x.column1 = y.column1)

我希望每当 y.column2 的任何行的值发生变化时,x.column2 的值都会自动更新。

注意:两个表中不存在同名的列。

最佳答案

UPDATE 
x
SET
x.column2 = (SELECT AVG(NULLIF(column2,0))
FROM y
WHERE y.column1 = x.column1)

这将在 x 中的每行运行一次子查询,但子查询仅限于 y 中的 row1 与当前 x.column1 匹配的行。

对于好奇的人来说,其内部结构有点更深。一般来说,所有查询(甚至子查询)都会返回类表对象(关系语言中的“关系”)。如果结果只有一行,则可以将其强制转换为“行”(关系语言中的“元组”)。如果元组只有一列,则可以进一步强制转换为该列中的值。这就是这里发生的事情。此外,不需要显式的“group by”,因为 WHERE 子句将子查询限制为仅我们想要求和的行,因此我们利用隐含的“对所有行进行分组”行为(类似于添加 GROUP BY y.column1 )

在您发表评论后,我想展示如何为同一事物创建一个“ View ”,这在 MySQL 中意味着聚合值实际上并不是“存储”的,而是实时计算的。这意味着当您插入 y 时它永远不会过时。

CREATE VIEW vx AS SELECT column1, AVG(NULLIF(column2,0) as avg FROM y GROUP BY y.column1

然后您可以从 vx 中进行选择,它将在后台运行该查询。

关于mysql - 如何为sql查询设置列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23022589/

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