【问题标题】:Create a generated column in MySql with count在 MySql 中使用 count 创建一个生成的列
【发布时间】:2020-07-31 01:07:21
【问题描述】:

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

谢谢!

【问题讨论】:

  • 就是这样,你不能为所欲为,你不应该存储可以按需计算的数据。
  • 不。不可能。
  • docs:“子查询是不允许的。”
  • 好的,知道了!但是有任何解决方法,我只需要概念或步骤(例如,创建另一个表来存储第一个和有效的语句,然后你可以做一个任何......),而不是代码本身

标签: mysql join window-functions sql-view generated-columns


【解决方案1】:

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

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

在 MySQL

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

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多