mysql - 在 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;
谢谢!
解决方案
你不能用计算列做你想做的事。我会推荐一个视图和窗口函数(在 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
推荐阅读
- java - 嵌套对象的 Javax 验证 - 不起作用
- vba - 当使用 DAO 和 ADO 将数据表表单直接绑定到 MS SQLServer 时,Access VBA 列快速过滤器不起作用
- python - 将文本行转换为 pandas 结构
- java - 为什么 Thread.join() 方法使用“join”这个词?
- java - JPA:OneToMany 关系使 Collection 为空
- php - 我怎样才能只运行一次查询而不是每次页面加载?
- java - 如何将文件字符串格式化为点路径
- java - IntelliJ - 在一个包含许多方法的类中查看 *single* 方法
- triggers - TRIGGER 语法错误 mysql 说 #1303 - 无法从另一个存储的例程中创建触发器 - phpmyadmin
- python - 加快python中插值函数的积分