MySQL防止总和两次

时间:2017-08-20 17:34:34

标签: php mysql pdo

我的PHP脚本中有以下查询:

SELECT SUM(score) + 1200 AS rating
FROM users_ratings
WHERE user_fk = ?

问题是,如果用户表中没有行,则评级将返回为NULL。所以我添加了一个if case:

SELECT IF(SUM(score) IS NULL, 0, SUM(score)) + 1200 AS rating
FROM users_ratings
WHERE user_fk = ?

但现在我想知道如何进行查询,而不重复SUM(score)。我猜我是否有很多行,总和会重复两次,这会影响应用程序的性能。

1 个答案:

答案 0 :(得分:2)

这是一个更简单的方法:

declare @Table1 table ([Date] varchar(80) null);
insert into @Table1 values ('12-31-2001'), ('02-28-2002');

declare @Table2 table ([Date] Date null);

insert into @Table2
select convert(date, [date], 101)
from @Table1;

select convert(char(10), [date], 104)
from @Table2;

SELECT ( COALESCE(SUM(score), 0) + 1200 ) AS rating FROM users_ratings WHERE user_fk = ?; 是一个ANSI标准函数,它从表达式列表中返回第一个非COALESCE()值。

然而,计算NULL两次的额外开销 - 即使它发生 - 与查询的其余部分相比应该非常小(查找数据,读取数据,将其汇总到一行)