MySQL我不希望我的SUM CASE是空的

时间:2012-05-23 20:10:01

标签: mysql database

我正在使用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 我的代码在哪里出错了?

5 个答案:

答案 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 ...

请参阅此SQLFiddle Example

答案 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) ?