Mysql
 sql >> Base de données >  >> RDS >> Mysql

Impossible d'additionner cumulativement `COUNT(*)`

Je suis d'accord avec @Ashalynd, la valeur de count(*) n'est pas encore évaluée. Voici une petite expérience que j'ai faite :

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

Pour chaque groupe, la variable est initialisée à 0. Cela signifie que COUNT(*) n'a pas encore été évalué.

Aussi, lorsque vous faites :

 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

Il n'a pas à évaluer 1. Il le résume directement et il vous donne la somme cumulée.