@Ashalyndに同意します。count(*)の値はまだ評価されていません。これが私が行った小さな実験です:
1.
SELECT
GROUP_ID,
@COUNTER := @COUNTER + COUNT(*) GROUPCOUNT,
@COUNTER COUNTER
FROM
TEST_GROUP_CUMULATIVE,
(SELECT @COUNTER := 0) R
GROUP BY
GROUP_ID;
-- RESULT
============
GROUP_ID GROUPCOUNT COUNTER
------------------------------------
1 1 0
2 1 0
3 1 0
2.
SELECT @COUNTER;
-- RESULT
=============
@COUNTER
--------
1
各グループについて、変数は0として初期化されています。これは、COUNT(*)がまだ評価されていないことを意味します。
また、次の場合:
1.
SELECT
GROUP_ID,
@COUNTER := @COUNTER + 1 GROUPCOUNT,
@COUNTER COUNTER
FROM
TEST_GROUP_CUMULATIVE,
(SELECT @COUNTER := 0) R
GROUP BY
GROUP_ID;
-- RESULT
============
GROUP_ID GROUPCOUNT COUNTER
------------------------------------
1 1 1
2 1 2
3 1 3
2.
SELECT @COUNTER;
-- RESULT
=============
@COUNTER
--------
3
1を評価する必要はありません。直接合計し、累積合計を算出します。