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

値が見つからない場合にMySQLのSUM関数が「0」を返すようにするにはどうすればよいですか?

    COALESCEを使用します その結果を避けるために。

    SELECT COALESCE(SUM(column),0)
    FROM   table
    WHERE  ...
    

    実際の動作を確認するには、次のSQLフィドルを参照してください: http:// www .sqlfiddle.com /#!2 / d1542 / 3/0

    詳細情報:

    与えられた3つのテーブル(1つはすべての数値、1つはすべてのヌル、もう1つは混合):

    SQLフィドル

    MySQL5.5.32スキーマのセットアップ

    CREATE TABLE foo
    (
      id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
      val   INT
    );
    
    INSERT INTO foo (val) VALUES
    (null),(1),(null),(2),(null),(3),(null),(4),(null),(5),(null),(6),(null);
    
    CREATE TABLE bar
    (
      id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
      val   INT
    );
    
    INSERT INTO bar (val) VALUES
    (1),(2),(3),(4),(5),(6);
    
    CREATE TABLE baz
    (
      id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
      val   INT
    );
    
    INSERT INTO baz (val) VALUES
    (null),(null),(null),(null),(null),(null);
    

    クエリ1

    SELECT  'foo'                   as table_name,
            'mixed null/non-null'   as description,
            21                      as expected_sum,
            COALESCE(SUM(val), 0)   as actual_sum
    FROM    foo
    UNION ALL
    
    SELECT  'bar'                   as table_name,
            'all non-null'          as description,
            21                      as expected_sum,
            COALESCE(SUM(val), 0)   as actual_sum
    FROM    bar
    UNION ALL
    
    SELECT  'baz'                   as table_name,
            'all null'              as description,
            0                       as expected_sum,
            COALESCE(SUM(val), 0)   as actual_sum
    FROM    baz
    

    結果

    | TABLE_NAME |         DESCRIPTION | EXPECTED_SUM | ACTUAL_SUM |
    |------------|---------------------|--------------|------------|
    |        foo | mixed null/non-null |           21 |         21 |
    |        bar |        all non-null |           21 |         21 |
    |        baz |            all null |            0 |          0 |
    


    1. SQLServerのテーブルから計算されていないすべての列を返す

    2. Mysql列が存在する場合にのみ列から選択する方法

    3. Docker(Apple Silicon / M1 Preview)MySQLマニフェストリストエントリにlinux / arm64/v8に一致するマニフェストがありません

    4. MySQLiプリペアドステートメントエラーレポート