SELECT COUNT(*) FROM table1 WHERE COUNT(*) > 5;
在此查询中,我们两次调用COUNT(*)
,从而在幕后进行了两次计算。这是执行查询的最佳方法还是有更好的方法?查询引擎是否仅从COUNT(*)
缓存table1
?
另一个例子:
SELECT MAX(col1) FROM table1 WHERE MAX(col1) > 5;
答案 0 :(得分:0)
此查询在语法上不正确:
SELECT COUNT(*)
FROM table1
WHERE COUNT(*) > 5;
WHERE
子句中不允许使用聚合功能。您可能打算:
SELECT COUNT(*)
FROM table1
HAVING COUNT(*) > 5;
在许多数据库(包括MySQL)中,您可以将其表示为:
SELECT COUNT(*) as cnt
FROM table1
HAVING cnt > 5;
我只是不知道是否保证第二次引用cnt
会 not 来重新计算该值。实际上,它可能取决于数据库。
也就是说,如果您要保证不会发生重新计算,请使用子查询:
SELECT cnt
FROM (SELECT COUNT(*) as cnt
FROM table1
) x
WHERE cnt > 5;