0

这是我的 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是一个未知的列。

那么是否可以在我的查询中使用条件(如“投票”)名称来计算目的?

4

2 回答 2

1

您不能为字段创建别名并在同一选择语句中使用相同的别名。

使用以下查询:

SELECT Ifnull(Round(Avg(votes), 2), 0) AS 'votes', 
       ( Ifnull(Round(Avg(votes), 2), 0) / 50 * 100 ) 
FROM   `polls`; 
于 2012-06-12T09:07:21.510 回答
1

第一的:

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

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

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

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

于 2012-06-12T09:07:42.260 回答