SQL新手--在使用窗口函数时遇到问题



我在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。

CREATE TABLE myTable(
CAGR DECIMAL(5,2),
Name VARCHAR(10));
<blockquote\
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;小提琴这里

最新更新