* 分组查询
* `GROUP BY 列名 HAVING 条件`, 是`SELECT`的子句, 用于将查询出的结果归类分组显示
* 格式:
* `SELECT 列1, 列2 FROM 表名 [WHERE 条件] GROUP BY 列名 HAVING 条件;`
* `HAVING`关键字的作用: 对查询结果进行分组显示后, 再次按条件过滤
* 最终 sql语句
* `SELECT 列1,列2 FROM 表名 WHERE条件 GROUP BY 列名 HAVING 条件 ORDER BY 列名 DESC/ASC;`
* 注意:
* 分组查询中能使用的列名
* `HAVING`条件中的列名: 必须是`SELECT`条件或`GROUP BY`条件中使用过的列名
* `GROUP BY`后的列名: 可以使用表的所有字段
* 聚合函数与分组的使用效果
* 使用聚合函数后再进行分组, 才相当于汇总统计
* `SELECT zname, SUM(zmoney) FROM zhangwu GROUP BY zname;`
* 不使用聚合函数的分组, 只有第一条记录的值
* `SELECT zname, zmoney FROM zhangwu GROUP BY zname;`
* `HAVING`和`WHERE`的区别
* 过滤时机不同
* WHERE是在分组前对结果进行过滤
* HAVING是在分组后对结果进行再次过滤
* 是否可跟随聚合函数不同
* WHERE后不可使用聚合函数
* HAVING后可以使用聚合函数
* 条件可用字段不同
* HAVING条件中的字段必须是SELECT条件或GROUP BY条件中使用过的字段
* WHERE条件中可以使用表的所有字段