[英]Operation with view column in mysql
我最近开始使用视图,并且出现了这个问题-是否可以对视图中的计算列执行任何操作? 例如,有一个表:
CREATE TABLE IF NOT EXISTS schema.table(
row_id INT(255) NOT NULL AUTO_INCREMENT PRIMARY KEY,
val1 DOUBLE,
val2 DOUBLE);
在val1和val2中输入任意数据:
INSERT INTO schema.table (va1, val2) VALUES (1, 2);
INSERT INTO schema.table (va1, val2) VALUES (3, 4);
INSERT INTO schema.table (va1, val2) VALUES (5, 6);
我尝试基于表创建一个视图:
CREATE OR REPLACE
VIEW schema.table_VIEW
AS select
t1.row_id as row_id,
LAG (val3,1,0) OVER() + t1.val1 - t1.val2 as val3,
from
schema.table t1
并且我得到错误val3在表中不存在,这通常是逻辑上的。 告诉我,这可以以某种方式实施吗? 该视图的目标是获得一列val3,在该列中将查看最后一行中该列的值,并添加val1并将val2从当前列中减去。
问题2-如果在表中创建列val4,是否可以使用val3中的值动态更新它?
从根本上讲,这是一个滚动总和问题,其中前一行的总和被添加到当前行的计算中,以计算当前行的总和 。 您可以在这里使用框架 。 具有SUM()
函数的ROWS UNBOUNDED PRECEDING
可用于考虑从第一行到当前行的val1 - val2
值的总和。
CREATE OR REPLACE
VIEW schema.table_VIEW
AS select
t1.row_id as row_id,
SUM(t1.val1 - t1.val2) OVER(ORDER BY t1.row_id
ROWS UNBOUNDED PRECEDING) AS val3
from
schema.table t1
模式(MySQL v8.0)
CREATE TABLE IF NOT EXISTS test(
row_id INT(255) NOT NULL AUTO_INCREMENT PRIMARY KEY,
val1 DOUBLE,
val2 DOUBLE);
INSERT INTO test (val1, val2) VALUES (1, 2);
INSERT INTO test (val1, val2) VALUES (3, 4);
INSERT INTO test (val1, val2) VALUES (5, 6);
CREATE OR REPLACE
VIEW test_VIEW
AS select
t1.row_id as row_id,
SUM(t1.val1 - t1.val2) OVER(ORDER BY t1.row_id
ROWS UNBOUNDED PRECEDING) AS val3
from
test t1
查询#1
select * from test_VIEW;
| row_id | val3 |
| ------ | ---- |
| 1 | -1 |
| 2 | -2 |
| 3 | -3 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.