1

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

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(*)(或编程等效操作)放入方程式中?

4

1 回答 1

3

加入获取计数的子查询。您也可以在@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子句,否则它分配的顺序将是任意且不可预测的。

于 2021-05-27T04:20:23.013 回答