Tôi đồng ý với @Ashalynd, giá trị của count (*) chưa được đánh giá. Đây là một thử nghiệm nhỏ tôi đã làm:
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
Đối với mỗi nhóm, biến đang được khởi tạo là 0. Điều này có nghĩa là COUNT (*) chưa được đánh giá.
Ngoài ra, khi bạn thực hiện:
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
Nó không phải đánh giá 1. Nó tổng hợp trực tiếp và nó cung cấp cho bạn tổng tích lũy.