我的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)
。我猜我是否有很多行,总和会重复两次,这会影响应用程序的性能。
答案 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
两次的额外开销 - 即使它发生 - 与查询的其余部分相比应该非常小(查找数据,读取数据,将其汇总到一行)