【MySQL必知必会】第十三章 分组数据

1、创建分组

  输入:

  SELECT vend_id , COUNT(*) AS num_prods

  FROM products

  GROUP BY vend_id;

  输出:

  vend_id  num_prods

  1001    3

  1002    7

  分析:选定要显示的列:vend_id和num_prods(行数统计列的新建的别名),选定来源表:products,分组依据:根据vend_id进行排序并进行数据分组统计。GROUP BY子句必须出现在WHERE子句之前,ORDER BY子句之后。

2、过滤分组

  使用HAVING关键字,语法和WHERE一致,只是过滤对象不同,一个是行,一个是组。值得注意的是,同时使用WHERE和HAVING关键字,WHERE关键字过滤掉的行,不会在HAVING关键字里进行统计分组。

  输入:

  SELECT  cust_id,COUNT (*) AS orders

  FROM  orders

  GROUP BY cust_id

  HAVING COUNT(*) >=2;

  输出:

  cust_id  orders

  1001    2

  分析:

  输出两列:cust_is和orders(新建列的别名,所有行的数目,包括null行);

  表源:cust_id;

  分组过滤依据:按照cust_id列的每一行进行数据统计,并形成 cust_id-行数 的映射键值对,然后在根据cust_id列的顺序排序映射键值对;

  过滤分组: cust_id-行数 映射对中 行数 大于等于2的映射对可以保留。

3、分组和排序区别

  ORDER BY:

  a、排序产生的输出。

  b、任意列都可以使用(甚至非选择的列也可以使用)

  c、非必须的。

  GROUP BY:

  a、对行进行分组,但输出可能不是分组的顺序。

  b、只能使用选择列或表达式列,而且必须使用每个选择列表达式。

  c、如果与聚集函数一起使用列(或表达式),则必须使用。

 

  注:要保证排序一定要使用ORDER BY子句,不要依赖GROUP BY子句。

 

  输入:

  SELECT order_num,SUM(quantity*item_price) AS ordertotal

  FROM orderitems

  GROUP BY order_num

  HAVING SUM(quantity*item_price)>=10;

  输出:

  order_num  ordertotal

  201      33.00

  205      11.00

  206      77.00

 

  输入:

  SELECT order_num,SUM(quantity*item_price) AS ordertotal

  FROM orderitems

  GROUP BY order_num

  HAVING SUM(quantity*item_price)>=10

  ORDER BY ordertotal;

  输出:

  order_num  ordertotal 

  205      11.00

  201      33.00

  206      77.00

   

  分析:上述演示了使用ORDER BY子句的差别。

4、SELECT语句中子句的顺序

  子句      说明            是否必须使用

   SELECT    要返回的列或表达式      是

   FROM     从中检索数据的表       仅在从表选择数据时使用

  WHERE     行级过滤           否

  GROUP BY    分组说明          仅在按组计算聚集时使用

  HAVING     组级过滤          否

  ORDER BY    输出的排序顺序       否

  LIMIT      要检索的行数        否

 

转载于:https://www.cnblogs.com/Hystudio-lzu/p/6883743.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值