这是我的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
是一个未知的列。
那么可以在我的查询中使用条件(作为“投票”)名称进行计算吗?
答案 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。