使用count在MySql中创建生成的列

使用count在MySql中创建生成的列,mysql,join,window-functions,sql-view,generated-columns,Mysql,Join,Window Functions,Sql View,Generated Columns,我不是数据库人员,尽管如此,我还是创建了一条语句,通过表中的唯一组ID计算ids函数,如下所示: USE farm; SELECT reg.grpId, COUNT(reg.id) as TOTAL FROM farm.reg group by reg.grpId; 因为我不想在NodeJs服务器上操作,所以我需要知道是否有可能生成一个如下所示的列,这给了我一个错误1064-在这个位置选择无效 声明: USE farm; ALTER TABLE reg ADD total INT GENERA

我不是数据库人员,尽管如此,我还是创建了一条语句,通过表中的唯一组ID计算ids函数,如下所示:

USE farm;
SELECT reg.grpId, COUNT(reg.id) as TOTAL FROM farm.reg group by reg.grpId;
因为我不想在NodeJs服务器上操作,所以我需要知道是否有可能生成一个如下所示的列,这给了我一个错误1064-在这个位置选择无效

声明:

USE farm;
ALTER TABLE reg ADD total INT GENERATED ALWAYS AS(SELECT reg.grpId COUNT(reg.id) FROM farm.reg group by reg.grpId)STORED AFTER grpId;

谢谢大家!

您不能对计算列执行任何操作。我建议使用视图和窗口功能(MySQL 8.0中提供)

在MySQL<8.0中,一个选项是使用聚合查询进行连接:

create view reg_view as
select r.*, g.total
from reg r
inner join (select grpId, count(*) total from reg group by grpId) g on g.grpId = r.grpId

在这种情况下,您不能按照自己的意愿去做,也不应该存储可以按需计算的数据。不。不可能。请参阅“不允许子查询”。好的,明白了!但是有任何解决方法,我只需要概念或步骤(例如,创建另一个表来存储第一个&有效语句,然后生成一个whatever…),而不是代码本身
create view reg_view as
select r.*, g.total
from reg r
inner join (select grpId, count(*) total from reg group by grpId) g on g.grpId = r.grpId