分组语句的使用

1、分组是在SELECT语句的GROUP BY字句中建立的。

  例子:输入:SELECT vend_id, COUNT(*) AS num_prods

        FROM products

        GROUP BY vend_id;

  因为使用了GROUP BY就不用指定要计算和估值的每个组了。系统会自动完成。GROUP BY子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。

2、GROUP BY的一些规定

  • GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。
  • 如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进行汇总。也就是,在建立分组时,指定的所有列都要一起计算。
  • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能使用别名。
  • 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。
  • 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将作为一组。
  • GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

3、过滤分组

  例子:SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >=2;

  用HAVING实现过滤功能,可是为什么不适用WHERE呢?原因就在于,WHERE过滤行,而HAVING过滤分组。HAVING支持所有的WHERE操作符。通俗来讲就是,WHERE在分组前进行过滤,HAVING在分组后进行过滤。

4、分组和排序的区别

ORDER BYGROUP BY
排序产生的输出分组行。但输出可能不是分组的顺序
任意列都可以使用(甚至非选择列也可以使用)只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要如果与聚集函数一起使用列(或表达式),则必须使用

  一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。

转载于:https://www.cnblogs.com/xiaoxli/p/9485656.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值