我在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 :(得分: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;