我正在使用MySQL数据库,我有一个很大的mysql_query,除了这一行之外,它的工作方式完全正常。
SELECT game_id,
COALESCE(
SUM(CASE WHEN game_score = 1 THEN 1 ELSE 0 END)
-
SUM(CASE WHEN game_score = 0 THEN 1 ELSE 0 END), 0) AS score
FROM ....
WHERE ....
GROUP BY ....
此行返回了我想要的几乎所有数字,但它们与我不使用COALESCE
功能时的数字相同。
当有game_id that has an empty
game_score`字段时,我希望此语句返回0
我的代码在哪里出错了?
答案 0 :(得分:2)
你也可以使用像这样的解码函数---
SELECT game_id,
SUM(DECODE(game_score, null, 0, 0, -1, 1, 0)) AS score
FROM ....
WHERE ....
GROUP BY ....
我已经检查了这个查询工作,其罚款 希望它可以帮助你......
答案 1 :(得分:1)
添加
when game_score is null then ...
SELECT game_id, case when game_score is null then 0 else
SUM(CASE WHEN game_score = 1 THEN 1 ELSE 0 END)
-
SUM(CASE WHEN game_score = 0 THEN 1 ELSE 0 END) end AS score
FROM games
group by ...
答案 2 :(得分:0)
使用is null
之类的
CASE WHEN game_score = 1 THEN 1
when game_score is null THEN 0
ELSE 0 END
答案 3 :(得分:0)
在语句中使用字段名称周围的COALESCE函数,而不是围绕SUM函数:
SUM(CASE COALESCE(game_score,0) WHEN 1 THEN 1 ELSE 0 END) - SUM(CASE COALESCE(game_score,0) WHEN 0 THEN 1 ELSE 0 END)
答案 4 :(得分:0)
问题是game_id可以在一行中有一个空的game_score字段而在另一行中有一个有效的一个。您的代码选择有效的代码并返回非null。
通过显式查找此案例作为合并的第一个参数来解决此问题: SELECT game_id, (例如,当计数(*)<> count(game_score)然后为NULL ELSE COALESCE(SUM(当game_score = 1那么1 0结束时), 。 。 。
我不确定合并是怎么回事。它似乎是为一堆不同的game_scores添加一个。您可以使用以下其中一种方式:
COUNT(game_score) ?
SUM(case when game_score between 1 and xx then 1 else 0 end) ?