[TOC=1,5]
>[success] # 分组查询
>group by 只是创建分组,但并不保证分组里面的数据的排列顺序,需 要使用 order by 子句对分组里面的数据进行排序。
**注弄清楚 group by /where /order by / having四个逻辑:**
group by 用来分组,where用来筛选,orderby用来排序,having用来过滤分组后的数据,所以逻辑应该是,我先筛选需要分组的数据,在吧分组的数据排列所以就是,group by 子句必须出现在 where 子句之后,order by 子句之前。
>[danger] ##### 用法
`SELECT vend_id,COUNT(*) AS max_price FROM products GROUP BY vend_id;`
![](https://box.kancloud.cn/0f6d4d14b57d52697335b31513dcc846_184x92.png)
<br>
*****
>[danger] ##### 过滤分组 -having
>除了能用 group by 分组数据外,MySQL 还允许对分组指定条件,规定包含 哪些分组,排除哪些分组。MySQL 使用 having 子句来完成该操作。
where 子句过滤指定的行,having 子句过滤指定的分组。
`SELECT vend_id,COUNT(*) AS max_price FROM products GROUP BY vend_id HAVING max_price>=3;`
![](https://box.kancloud.cn/56b504a4c93f34d6b86076c2032c51d7_185x61.png)
* * * * *
<br>
>[danger] ##### select 子句顺序
![](https://box.kancloud.cn/1d39c7e95747adc3c316e7e608512ae1_823x328.png)