假设我有以下问题:
SELECT
COUNT(id) numRows,
SUM(value) totSum
FROM someTable
WHERE foo= @bar
足够简单。它将列foo等于传递参数的所有值相加,并计算总和中涉及的行数。 现在,在我的程序中,我有一些逻辑,只有当结果计数低于4时,才会评估该值。
我想优化查询,以便在count超过4时获得空结果集。 我的第一个想法是在查询上打出另一个条件(其中numRows< 4),但这不起作用,因为numRows不是someTable中定义的列。 我的第二个想法是使查询成为子查询,然后通过子查询的表过滤结果,如下所示:
SELECT
*
FROM (
SELECT
COUNT(id) numRows,
SUM(value) totSum
FROM someTable
WHERE foo= @bar
) subQuery
where subQuery.numRows < 4
我对此解决方案的主要问题是子查询是否将被完全计算,或者如果主要查询在numRows达到4时立即停止它。
答案 0 :(得分:4)
您可以将其添加到原始查询中。绝对更容易阅读,可能(不确定)更好的表现。
HAVING COUNT(ID) < 4