MySQL / MariaDB 在等式中放置 COUNT(*)

问题描述

我正在尝试获取表或列中的行数,并将该值放入等式中,如下所示:

UPDATE myTable 
SET myCalculatedColumn = COUNT(*) / (@rownum:= 1 + @rownum)
WHERE 0 = (@rownum:=0)

很遗憾,我收到错误 1111“组功能的无效使用”。我也试过:

SET @c = COUNT(*);
UPDATE myTable 
SET myCalculatedColumn = @c / (@rownum:= 1 + @rownum)
WHERE 0 = (@rownum:=0)

但这会产生同样的错误。

如何将 COUNT(*)(或编程等效的操作)放入等式中?

解决方法

加入一个获得计数的子查询。您也可以在那里初始化 @rownum 变量。

UPDATE myTable AS t
CROSS JOIN (SELECT COUNT(*) AS count,@rownum := 0 FROM myTable) AS c
SET myCalculatedColumn = count / (@rownum := 1 + @rownum)

如果不想做交叉连接,可以在设置@c时使用子查询。您只需要告诉 COUNT(*) 从哪个表开始计数。

SET @c = (SELECT COUNT(*) FROM myTable);
SET @rownum = 0;
UPDATE myTable 
SET myCalculatedColumn = @c / (@rownum:= 1 + @rownum);

请注意,它分配给 myCalculatedColumn 的顺序将是任意且不可预测的,除非您还有一个 ORDER BY 子句。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...