2015-01-05 41 views
0

我在MySQL中遇到了一些麻烦。MySQL即使合并也会返回'空结果'

这里是我使用查询:

SELECT 
    COALESCE(SUM(`a`.`battles`), 0) AS `battles` 
FROM 
    `account_stats` AS `a` 
WHERE 
    `a`.`account_id` = 12345 
GROUP BY 
    `a`.`account_id` 

account_stats不为空,但与account_id = 12345没有行。

我想MySQL返回0战斗而不是Empty set。但即使有COALSECEIFNULL它返回Empty set

当我删除GROUP BY一切正常,但我需要它来计算战斗的总和。

有没有办法解决这个问题?

+0

这不是'GROUP BY'的意思! –

回答

1

如果你只是想在一个帐户信息,您可以使用条件的聚集,如果你想查询返回与0的值的行:

SELECT SUM(CASE WHEN a.account_id = 12345 THEN a.battles ELSE 0 END) as battles 
FROM account_stats a; 

如果表不为空,那么你就不要不需要coalesce()

如果您在account_id有一个索引和表是很大的,下面很可能会更有效,因为子查询将使用索引和查询的其余部分将被操纵的单行:

SELECT x.account_id, COALESCE(SUM(a.battles), 0) as battles 
FROM (SELECT 12345 as account_id 
    ) x LEFT JOIN 
    (SELECT a.account_id, SUM(a.battles) as battles 
     FROM account_stats a 
     WHERE a.account_id = 12345 
    ) a 
    ON x.account_id = a.account_id; 
+0

工程很好。但是您需要在第二个子查询的SELECT中添加“a.account_id”。 –

相关问题