首页 > 解决方案 > 在 MySql 中使用 count 创建一个生成的列

问题描述

我不是数据库专家,尽管如此,我创建了一个语句,它通过表中的唯一组 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 position

该声明:

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;

谢谢!

标签: mysqljoinwindow-functionssql-viewgenerated-columns

解决方案


你不能用计算列做你想做的事。我会推荐一个视图和窗口函数(在 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

推荐阅读