having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。我的理解就是真实表中没有此数据,这些数据是通过一些函数生存。 SQL实例: 一、显示每个地区的总人口数和总面积. 先以region把返回记录分成多个组,这就是GROUP BY的字面含义。分完组后,然后用聚合函数对每组中 二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。 SELECT region, SUM(population), SUM(area) 在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。 MySQL判断某个字段的长度: select home_page from aaa表 where char_length(trim(home_page))<10 and char_length(trim(home_page))>1; mysql中的where和having子句的区别mysql中的where和having子句都可以实现过滤记录的功能,但他们的用法还是有一些区别的,看一例子: 2017-07-05 12:03:48更新: 我们来对比一下 SELECT ip,ip1,ip2,ip3,ip4,count(*) ct,mobile_info FROM `lmaster_log` GROUP BY ip1,ip2,ip3 ORDER BY ip1,ip2,ip3,ip4 HAVING ct > 2; SELECT ip,ip1,ip2,ip3,ip4,count(*) ct,mobile_info FROM `lmaster_log` GROUP BY ip1,ip2,ip3 HAVING ct > 2 ORDER BY ip1,ip2,ip3,ip4; 一个语句 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'HAVING ct > 2' at line 2 语句2是出现结果,所以我们在使用order by时要注意,他的位置 |
|