即使使用coalesce,MySQL也会返回'空结果'

时间:2015-01-05 12:36:42

标签: 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。但即使使用 COALSECE IFNULL ,它也会返回Empty set

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

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

1 个答案:

答案 0 :(得分: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;