查询中的SQL重新计算?

时间:2019-06-16 01:41:05

标签: mysql sql

SELECT COUNT(*) FROM table1 WHERE COUNT(*) > 5;

在此查询中,我们两次调用COUNT(*),从而在幕后进行了两次计算。这是执行查询的最佳方法还是有更好的方法?查询引擎是否仅从COUNT(*)缓存table1

另一个例子:

SELECT MAX(col1) FROM table1 WHERE MAX(col1) > 5;

1 个答案:

答案 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;