使用计数在 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
我不是数据库专家,尽管如此,我还是创建了一个语句,通过 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