每天一点MySQL-分组数据
2017-08-03 15:42
429 查看
数据分组
分组数据允许把数据分为多个逻辑组,以便对每个组进行聚集计算。创建分组
分组是在SELECT语句中的GROUP BY子句中建立的。Ex:
SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id
上面的SELECT语句指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段(用COUNT(*)函数建立)。GROUP BY子句指示MySQL按vend_id排序并分组数据。这导致对每个vend_id而不是整个表计算num_prods一次。
GROUP BY子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。
一些重要的规定:
GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制
在建立分组时,指定的所有列都一起计算(所以不能从个别列取回数据)
GROUP BY子句中列出的每个列都必须是检索列有效表达式(但不能是聚集函数)。
除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出
如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将作为一组
GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前
过滤分组
在这里不能使用WHERE,因为WHERE过滤指定的行而不是分组。在这里应该使用HAVING子句。HAVING支持所有WHERE操作符,唯一的差别就是WHERE过滤行,而HAVING过滤分组。或者说,WHERE是在数据分组前进行过滤,HAVING在数据分组后进行过滤。
Ex:
SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2
参考资料
《MySQL必知必会》相关文章推荐
- 每天一点MySQL-数据类型
- 每天一点mysql-检索数据
- mysql按照每天分组查询数据结果排序不是从1到31而是1后接10
- 每天一点mysql-创建数据库并插入数据
- 每天一点MySQL-过滤数据
- 每天一点数据库之-----Day 6 数据分组与数据分页
- mysql查询获取分组后最新的一条记录,策略:先排序,然后在次分组查询(默认第一条),就是最新的一条数据了
- 每天一点积累(三)--mysql存储引擎
- MySql按周/月/日分组统计数据的方法
- MySQL-Front 建表引发的一点小思考(数据表格模版)
- mysql中group by分组后查询无数据补0;
- Mysql分组合并函数并进行数据列处理
- mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法
- mysql查询 根据月份查询每天的数据 没有数据显示0
- 每天一点python——python数据类型
- MySQL学习笔记——汇总和分组数据
- mysql分组查询数据,将数据中null和''作为一组查询结果
- Mysql高级查询-----汇总和分组数据
- mysql 分组查询数据时,如何获得用于分页的总记录数?
- MySql按周,按月,按日分组统计数据