可以在 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 部分。
可以在 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 部分。
您可以在 where 或 join 子句中使用您喜欢的任何(支持的)算术,只要最终结果是布尔值(true、false 或 NULL(其中 null 被视为 false)。
这通常意味着不能使用索引,因为它们的结构只允许它们用于直接相等、不相等或范围查找。在您给出的示例中,您将没有可以定义的有用索引,因此查询运行器将被迫执行表扫描。对于引用一个表的简单过滤子句,仅当一侧是常量(或在查询运行时为常量的变量)时才会使用索引。
对于连接子句,如果该侧是直接列引用(即没有算术),则可以将索引用于匹配的一侧,但如果连接可能覆盖许多行,则仍可以像在索引中一样使用扫描(甚至table) 扫描可以比很多索引搜索更快。
你可以试试这样的...
SELECT
employee_id,
max_hours,
SUM(hours)
FROM
some_table
GROUP BY
employee_id
HAVING
SUM(hours) < (max_hours * 1.5)