[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)