MySQL函数:在子句中HAVING查询运行两次

时间:2014-06-18 16:59:39

标签: php mysql sql

我编写了MySQL函数,用于检索数据库记录的总和。

SELECT id, myFunction(id) as price from myTable;

返回:

+———————+————————+
| id    |  price |
|  1    |    10  |
|  2    |    20  |
|  3    |    30  |
|  4    |    40  |
|  5    |    50  |
+———————+————————+

当我尝试将结果限制在20和40之间时,会出现问题。

如果我在HAVING CLAUSE中执行此操作,此功能将执行两次。第一次在SELECT myFunction中检索,第二次在HAVING PRICE附近。

示例:

SELECT id, myFunction(id) as price from myTable HAVING price BETWEEN 20 AND 40.

是否可以将此查询修改为一次性执行?由于计算复杂,两次运行同样的操作是个坏主意。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用如下子查询“实现”结果:

SELECT * FROM
(SELECT id, myFunction(id) AS price FROM myTable) t
WHERE price BETWEEN 20 AND 40

答案 1 :(得分:0)

使用SUM(id)函数代替myFunction(id),因为毕竟你只是计算id的总和,使用这个查询

SELECT id,SUM(id)作为价格来自myTable WHERE价格BETWEEN 20和40,

始终使用with groupby子句。