使用计数在 MySql 中创建一个生成列

Create a generated column in MySql with count

我不是数据库专家,尽管如此,我还是创建了一个语句,通过 table 中的唯一组 ID 来计算 ids 函数,如下所示:

USE farm;
SELECT reg.grpId, COUNT(reg.id) as TOTAL FROM farm.reg group by reg.grpId;

因为我不想在 NodeJs 服务器上操作,所以我需要知道是否可以生成如下所示的生成列,这会给我一个错误 1064 -SELECT not valid at this位置

声明:

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;

谢谢!

您不能对计算列做您想做的事。我会推荐一个视图和 window 函数(在 MySQL 8.0 中可用)

create view reg_view as
select r.*, count(*) over(partition by grpId) total
from reg r

在 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