MySql WHERE中的数学计算

时间:2013-06-08 01:24:19

标签: mysql

可以在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部分​​。

2 个答案:

答案 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)。

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

对于连接子句,索引可能用于匹配的一侧,如果该端是直接列引用(即没有算术),但是如果连接可能覆盖许多行,则扫描仍可用作索引(或甚至表格)扫描比许多索引寻求更快。