问题描述
我正在尝试获取表或列中的行数,并将该值放入等式中,如下所示:
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
子句。