您的位置:首页 > 数据库 > MySQL

每天一点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必知必会》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: