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

MySQL / MariaDB place COUNT(*) in equation

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

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(*) 从什么 table 算起。

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

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