sql >> データベース >  >> RDS >> Mysql

`COUNT(*)`を累積的に合計することはできません

    @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を評価する必要はありません。直接合計し、累積合計を算出します。



    1. Oracleでログオントリガーを無効にする

    2. Laravelを使用したSSLを介したMySQL接続

    3. SqlServer2008ビューでのORDERBY

    4. OracleではsubstrまたはLIKEの方が高速ですか?