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