然后mysql中的sum列使用where子句中的结果

Mic*_*eap 8 mysql sql

我希望能够这样做:

SELECT dept.id, (invoices.col1 + invoices.col2 + invoices.col3) as sumTotal 
FROM dept 
     INNER JOIN invoices ON invoices.id_dept = dept.id 
WHERE sumTotal > 10000
Run Code Online (Sandbox Code Playgroud)

但是我在使用"sumTotal"时得到了一个未知的专栏.

这可能吗?

Har*_*rev 16

用途HAVING:

SELECT dept.id, (invoices.col1 + invoices.col2 + invoices.col3) as sumTotal 
FROM dept 
INNER JOIN invoices
    ON invoices.id_dept = dept.id 
HAVING sumTotal > 10000
Run Code Online (Sandbox Code Playgroud)

问题是该WHERE子句在语句之前执行SELECT.因此该sumTotal列尚不可用.

该HAVING条款在声明后执行SELECT.在选择所有内容后,它会过滤掉结果.但请记住,因为使用HAVING速度较慢.它在整个行集上运行.

从MySQL文档:

几乎在最后一次应用HAVING子句,就在将项目发送到客户端之前,没有优化.(在HAVING之后应用LIMIT.)

SQL标准要求HAVING必须仅引用GROUP BY子句中的列或聚合函数中使用的列.但是,MySQL支持对此行为的扩展,并允许HAVING引用SELECT列表中的列和外部子查询中的列.


HAVING子句可以引用聚合函数,WHERE子句不能:

SELECT user, MAX(salary)
FROM users
GROUP BY user
HAVING MAX(salary) > 10;
Run Code Online (Sandbox Code Playgroud)

不要将HAVING用于应该在WHERE子句中的项目.

  • 是的,但我认为值得注意的是,尽管如此:) (2认同)

Str*_*rry 5

或者使用WHERE ......

SELECT dept.id, (invoices.col1 + invoices.col2 + invoices.col3) as sumTotal 
  FROM dept 
  JOIN invoices ON invoices.id_dept = dept.id 
 WHERE invoices.col1 + invoices.col2 + invoices.col3 > 10000
Run Code Online (Sandbox Code Playgroud)