我在mysql中有一个简单的表,它有一个名为CAGR的列(类型:DECIMAL(。
我的意图是始终生成一个新列,用于计算每行的CAGR平均值(一直都是相同的(。我好像想不通。
首先,我测试我是否可以用SELECT语句来实现这一点——我可以——这是我使用的语句:
SELECT Name,
AVG(CAGR) OVER () "avg_cagr"
FROM Table;
我跑了上面的,它起作用了。对于我的每一行,我都会得到标题(Name和avg_cgr(、Name和相同的avg_cger。太棒了
接下来,我准备使用GENERTATED AS创建我的新专栏
ALTER TABLE Table
ADD COLUMN CAGR_AVG DECIMAL(12,2)
GENERATED ALWAYS AS (AVG (CAGR) OVER ()) STORED NULL;
这不起作用。我得到以下回复:
错误代码:3593。您不能在此上下文中使用窗口函数"avg">
为什么?
在虚拟列中,不能使用其他行的信息。一种解决方案是使用VIEW。
<blockquote\CREATE TABLE myTable( CAGR DECIMAL(5,2), Name VARCHAR(10));
✓
INSERT INTO myTable VALUES
(2.5,'one'),
(7.9,'two'),
(15,'three');
>✓
CREATE VIEW myView AS SELECT Name, CAGR, AVG (CAGR) OVER () "avg_cagr" FROM myTable;
✓
SELECT * FROM myView;
名称|CAGR|avg_cgr:----|----:|-------:一件|2.50|8.466667二|7.90|8.466667three | 15.00 | 8.466667
db<gt;小提琴这里