繁体   English   中英

在mysql中使用视图列进行操作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM