我知道这个问题已经被讨论了很多,但我的研究都无法让我相信“where
' and 'having
MySQL 中的 ' 子句。据我了解,我们可以使用 'where' 子句实现所有可以完成的操作having
'。例如。select * from users having username='admin'
。那你为什么需要'where
' 条款?使用 where 会产生性能差异吗?
The WHERE
子句在聚合之前过滤来自源的数据,而HAVING
子句过滤之后的数据GROUP BY
已被应用。一般来说,这意味着任何非聚合过滤器都可以出现在任一位置,但如果您的查询中没有引用一列,则只能在WHERE
clause.
例如,如果您有下表:
| ID | VALUE |
--------------
| 1 | 15 |
| 2 | 15 |
| 3 | 20 |
| 4 | 20 |
| 5 | 25 |
| 6 | 30 |
| 7 | 40 |
假设您要应用以下查询:
select value, count(value)
from Table1
group by value
但您只想包含其中的行ID > 2
。如果你把它放在HAVING
条款,您将得到一个error http://www.sqlfiddle.com/#!2/f6741/17,因为ID
列在聚合后不可用,因为它不在SELECT
条款。在这种情况下,您将需要使用WHERE
子句改为:
select value, count(value)
from Table1
where id > 2
group by value
Demo: http://www.sqlfiddle.com/#!2/f6741/16 http://www.sqlfiddle.com/#!2/f6741/16
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)