2016-11-25 73 views
0

此product_id没有行。结果不返回行而不是SUM = 0.MySQL SUM返回没有行应返回0

SELECT COALESCE(SUM(amount), 0) FROM store2product WHERE product_id = 6706434 GROUP BY product_id; 

有没有办法得到结果= 0?

+0

表是'绝对amount'数字字段?如果'SUM'返回NULL,'COALESCE'只会返回零,这可能不是。 – BrynJ

+0

amount is SMALLINT NOT NULL – tttpapi

+2

显然,如果没有与您的WHERE子句相匹配的记录,则不会在结果集中获得记录。你需要一些JOIN或子查询。 – CBroe

回答

1

store2product中没有product_id = 6706434的记录。当您按product_id进行分组时,您会收到一个结果行,每product_id通过此查询找到。由于未找到product_id,因此不会返回任何行。

简单的解决方案:删除GROUP BY

SELECT 
    COALESCE(SUM(amount), 0) 
FROM store2product 
WHERE product_id = 6706434; 

现在你在任何情况下都会得到一个结果行。

+0

完美的作品 – tttpapi

0

试试这一招..

模式对你的情况

CREATE TABLE #TAB (ID INT, AMT DECIMAL(18,2)) 
INSERT INTO #TAB 
SELECT 1,1200 
UNION ALL 
SELECT 1,120 
UNION ALL 
SELECT 3, 100 

现在查询像

SELECT SUM(ISNULL(AMT,0)) AS AMT FROM (

SELECT ID, SUM(AMT)AMT FROM #TAB WHERE ID =2 GROUP BY ID 
UNION ALL 
SELECT NULL AS ID, NULL AS AMT 

)A