簡體   English   中英

如果找不到值,如何在 MySQL 中獲取 SUM 函數以返回“0”?

[英]How do I get SUM function in MySQL to return '0' if no values are found?

假設我在 MySQL 中有一個簡單的函數:

SELECT SUM(Column_1)
FROM Table
WHERE Column_2 = 'Test'

如果Column_ 2 中沒有條目包含文本“Test”,則此函數返回NULL ,而我希望它返回 0。

我知道這里已經多次問過類似的問題,但我無法根據我的目的調整答案,因此如果您能幫助我解決這個問題,我將不勝感激。

使用COALESCE來避免這種結果。

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

要查看它的實際效果,請參閱此 sql 小提琴: http ://www.sqlfiddle.com/#!2/d1542/3 /0


更多信息:

給定三張表(一張全數字,一張全空,一張混合):

SQL小提琴

MySQL 5.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 |

使用IFNULLCOALESCE

SELECT IFNULL(SUM(Column1), 0) AS total FROM...

SELECT COALESCE(SUM(Column1), 0) AS total FROM...

它們之間的區別在於, IFNULL是一個帶有兩個參數的 MySQL 擴展,而COALESCE是一個可以帶有一個或多個參數的標准 SQL 函數。 當你只有兩個參數時,使用IFNULL會稍微快一點,但這里的差異是微不足道的,因為它只被調用一次。

無法准確獲得您所要求的內容,但是如果您使用的是聚合 SUM 函數,這意味着您正在對表進行分組。

查詢是這樣的 MYSQL

Select IFNULL(SUM(COLUMN1),0) as total from mytable group by condition

如果列的總和為 0,則顯示為空

select if(sum(column)>0,sum(column),'')
from table 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM