使用查询中的条件名称将空字段替换为0

时间:2012-06-12 09:05:01

标签: mysql

这是我的MySQL查询:

SELECT ROUND( AVG(p.votes), 2) AS 'votes', games.*
FROM games
LEFT JOIN polls p ON (p.gid = games.id)
GROUP BY games.id;

它工作正常,但如果polls表中的游戏没有任何投票 - votes字段为NULL然后在结果中 - 如何替换它以便它将显示而是0(因为在0中找到了polls行。

此外:

是否可以命名我的病情,然后使用它fe。在MySQL中进行计算?

这就是我的意思:

SELECT ROUND( AVG(votes), 2) AS 'votes', (votes / 50 * 100) FROM `polls`;

会抛出一条错误消息,指出votes是一个未知的列。

那么可以在我的查询中使用条件(作为“投票”)名称进行计算吗?

2 个答案:

答案 0 :(得分:1)

您无法为字段创建别名,并在同一个select语句中使用相同的别名。

使用以下查询:

SELECT Ifnull(Round(Avg(votes), 2), 0) AS 'votes', 
       ( Ifnull(Round(Avg(votes), 2), 0) / 50 * 100 ) 
FROM   `polls`; 

答案 1 :(得分:1)

首先:

COALESCE(ROUND( AVG(p.votes), 2), 0)

第二: 不,在完全相同的陈述中是不可能的。如果别名部分位于子查询中,则可能。 所以你必须重写

(COALESCE(ROUND( AVG(p.votes), 2), 0) / 50 * 100)

COALESCE和IFNULL实现了相同的目标(可能不完全相同),但COALESCE是ANSI SQL。