mysql 数据操作 单表查询 having 过滤
SELECT 字段1,字段2... FROM 库名.表名
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
1.首先找到表 库.表名
2. 经过where 过滤条件 找到符合条件记录
3.按照分组归类 只剩下组这个单位
4.剩下只能取 组名和聚合函数 ,having过滤只有分组 和聚合函数
HAVING与WHERE不一样的地方在于
执行优先级从高到低:where > group by > having
#1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是where绝对不能使用聚合函数。 #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,可以使用聚合函数
having 过滤 是在分组之后进行
having 一定配合聚合函数使用
例如:
报错
分组后无法取到其他字段
因为 id_info 是别名,是运行在having之后的 distinct 字段 在执行 having id_info id_info就不存在, id_info在后面执行 所以这里报错
mysql> select post,count(id) as id_info from employee group by post having id_info >5;
ERROR 1463 (42000): Non-grouping field 'id_info' is used in HAVING clause
mysql> select * from employee having id > 5 ;
ERROR 1463 (42000): Non-grouping field 'id' is used in HAVING clause
正确使用
mysql> select post,count(id) from employee group by post ;
+-----------+-----------+
| post | count(id) |
+-----------+-----------+
| operation | 5 |
| sale | 5 |
| teacher | 6 |
+-----------+-----------+
3 rows in set (0.00 sec) mysql> select post,count(id) from employee group by post having count(id) >5 ;
+---------+-----------+
| post | count(id) |
+---------+-----------+
| teacher | 6 |
+---------+-----------+
1 row in set (0.00 sec)
取 职位名以及每个职位里的员工数 并且把每个职位 里 员工数 大于5 的 职位 取出来
mysql> select post,group_concat(id) from employee group by post ;
+-----------+------------------+
| post | group_concat(id) |
+-----------+------------------+
| operation | 16,15,14,13,12 |
| sale | 11,10,9,8,7 |
| teacher | 6,5,4,3,2,1 |
+-----------+------------------+
3 rows in set (0.00 sec) mysql> select post,group_concat(id) from employee group by post having count(id) >5 ;
+---------+------------------+
| post | group_concat(id) |
+---------+------------------+
| teacher | 6,5,4,3,2,1 |
+---------+------------------+
1 row in set (0.00 sec)
mysql 数据操作 单表查询 having 过滤的更多相关文章
- mysql 数据操作 单表查询 having 过滤 练习
1. 查询各岗位内包含的员工个数小于2的岗位名.岗位内包含员工名字.个数 mysql> select post,group_concat(name),count(id) from employe ...
- mysql 数据操作 单表查询 目录
mysql 数据操作 单表查询 mysql 数据操作 单表查询 简单查询 避免重复DISTINCT mysql 数据操作 单表查询 通过四则运算查询 mysql 数据操作 单表查询 concat()函 ...
- mysql 数据操作 单表查询 where 约束 目录
mysql 数据操作 单表查询 where约束 between and or mysql 数据操作 单表查询 where约束 is null in mysql 数据操作 单表查询 where约束 li ...
- mysql 数据操作 单表查询 group by 分组 目录
mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...
- mysql 数据操作 单表查询 group by 介绍
group by 是在where 之后运行 在写单表查询语法的时候 应该把group by 写在 where 之后 执行顺序 1.先找到表 from 库.表名 2.按照where 约束条件 过滤你想要 ...
- mysql 数据操作 单表查询
单表查询的语法 distinct 去重 SELECT 字段1,字段2... FROM 表名 库.表名 WHERE 条件 过滤 符合条件的 GROUP BY field 分组条件 HAVING 筛选 过 ...
- mysql 数据操作 单表查询 group by 聚合函数
强调: 如果我们用unique的字段作为分组的依据,则每一条记录自成一组,这种分组没有意义 多条记录之间的某个字段值相同,该字段通常用来作为分组的依据 如果按照每个字段都是唯一的进行分组,意味着按照这 ...
- mysql 数据操作 单表查询 简单查询 避免重复DISTINCT
创建数据库company create database company charset=utf8; use company; company.employee 员工id id int 姓名 emp_ ...
- mysql 数据操作 单表查询 通过四则运算查询
#通过四则运算查询 FROM employee; AS Annual_salary FROM employee; Annual_salary FROM employee; 查看年薪salary*12 ...
随机推荐
- ms-SQL 递归调用
----递归函数-------------------------------------------------------------------------- create function d ...
- javaScript实现归并排序
归并排序是一个O(nlogn)的算法,其基本思想就是一个分治的策略,先进行划分,然后再进行合并,下面举个例子.有这样一组数据: {5,4,1,22,12,32,45,21} 如果对它进行归并排序的话, ...
- 基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mysql中,查看当前数据库下所有的基表,不包括视图
环境描述: mysql版本:5.5.57-log 操作系统版本:Red Hat Enterprise Linux Server release 6.6 (Santiago) 需求描述: 查看当前使用的 ...
- 《R语言入门》语言及环境简单介绍
简单介绍 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss ...
- QlikView报表显示连续若干个月内活跃用户的数量
之前有朋友提到了这样一个需求,要计算三年中每年都有销售记录的客户量,仅仅有近期两年有销售纪录的客户量(假如某个用户2012年和2014年都有记录,在2013年没有则不计算在内).以及近期一年的新增客户 ...
- 单独使用 EHCache
1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中.如项目已安装了 ...
- HttpServletResponse status对应的状态信息
1xx - 信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应. ·0 - 本地响应成功. · 100 - Continue 初始的请求已 ...
- cocos2d-x游戏引擎核心之二——内存管理
(一) cocos2d-x 内存管理 cocos2d里面管理内存采用了引用计数的方式,具体来说就是CCObject里面有个成员变量m_uReference(计数); 1, m_uReference的变 ...
- jQuery中的$.each的用法
$.each(Array,function(i,value){ this; //this指向当前对象 i; //i表示当前下标 value; //value表示当前元素 })