MySQL return 'empty result' 即使合并

MySQL return 'empty result' even with coalesce

我在使用 MySQL 时遇到了一些问题。

这是我使用的查询:

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

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

我想要 MySQL returns 0 场战斗 而不是 Empty set。但即使使用 COALSECEIFNULL 它 returns Empty set.

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

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

如果您只需要一个帐户的信息,如果您希望查询到 return 行,值为 0:

,则可以使用条件聚合
SELECT SUM(CASE WHEN a.account_id = 12345 THEN a.battles ELSE 0 END) as battles
FROM account_stats a;

如果table不为空,则不需要coalesce()

如果您在 account_id 上有一个索引并且 table 很大,则以下可能会更有效,因为子查询将使用该索引,而查询的其余部分将操作一个单行:

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;