sql >> Databasteknik >  >> RDS >> Mysql

Kan inte summera "COUNT(*)" kumulativt

Jag håller med @Ashalynd, värdet på count(*) har inte utvärderats ännu. Här är ett litet experiment jag gjorde:

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

För varje grupp initieras variabeln som 0. Detta betyder att COUNT(*) inte har utvärderats ännu.

Dessutom, när du gör:

 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

Den behöver inte utvärdera 1. Den summerar den direkt och ger dig den ackumulerade summan.



  1. Hur man hämtar värden från en normaliserad MySQL 5.7-struktur som matchar vissa kriterier

  2. hur man hämtar flera resultatuppsättningar från en mysql-lagrad procedur i laravel

  3. Vilka privilegier krävs i MySQL för att exekvera en trigger?

  4. PDF skapad med FPDF och hur man sparar och hämtar pdf:en