sql >> Database >  >> RDS >> Mysql

Kan `COUNT(*)` . niet cumulatief optellen

Ik ben het eens met @Ashalynd, de waarde van count(*) is nog niet geëvalueerd. Hier is een klein experiment dat ik heb gedaan:

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

Voor elke groep wordt de variabele geïnitialiseerd als 0. Dit betekent dat COUNT(*) nog niet is geëvalueerd.

En als je dat doet:

 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

Het hoeft niet te evalueren 1. Het vat het direct samen en het geeft je de cumulatieve som.



  1. Controleer of associatie bestaat zonder een databasehit te veroorzaken

  2. Verschillende gevallen met uitvoer op dezelfde rij

  3. Converteren van DateTime naar INT

  4. Som tot drempelwaarde bereikt en reset vervolgens de teller