0

可以在 MySQL 语句的 WHERE 部分进行数学计算吗?

例如,假设我有以下 SQL 语句:

SELECT
   employee_id,
   max_hours,
   sum(hours) AS total_hours
FROM
   some_table
WHERE
   total_hours < (max_hours * 1.5)

我环顾四周,发现 MySQL 确实有数学函数,但所有的例子都在语句的 SELECT 部分。

4

2 回答 2

2

您可以在 where 或 join 子句中使用您喜欢的任何(支持的)算术,只要最终结果是布尔值(true、false 或 NULL(其中 null 被视为 false)。

这通常意味着不能使用索引,因为它们的结构只允许它们用于直接相等、不相等或范围查找。在您给出的示例中,您将没有可以定义的有用索引,因此查询运行器将被迫执行表扫描。对于引用一个表的简单过滤子句,仅当一侧是常量(或在查询运行时为常量的变量)时才会使用索引。

对于连接子句,如果该侧是直接列引用(即没有算术),则可以将索引用于匹配的一侧,但如果连接可能覆盖许多行,则仍可以像在索引中一样使用扫描(甚至table) 扫描可以比很多索引搜索更快。

于 2013-06-08T01:45:58.760 回答
1

你可以试试这样的...

SELECT
   employee_id,
   max_hours,
   SUM(hours)
FROM
   some_table
GROUP BY
   employee_id
HAVING
   SUM(hours) < (max_hours * 1.5)
于 2013-06-08T01:38:21.743 回答