我在使用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
时,一切正常,但是我需要它来计算战斗的总和。有没有解决此问题的方法?
最佳答案
如果只需要一个帐户的信息,则希望查询返回值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;