最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL学习足迹记录11--分组数据--GROUPBY,HAVING_MySQL

来源:动视网 责编:小采 时间:2020-11-09 18:41:27
文档

MySQL学习足迹记录11--分组数据--GROUPBY,HAVING_MySQL

MySQL学习足迹记录11--分组数据--GROUPBY,HAVING_MySQL:bitsCN.com MySQL学习足迹记录11--分组数据--GROUP BY,HAVING 1.创建分组GROUP BY 先列出所有的vend_id,以便作对比 mysql> SELECT vend_id FROM products;+---------+| vend_id |+---------+| 1001 1001
推荐度:
导读MySQL学习足迹记录11--分组数据--GROUPBY,HAVING_MySQL:bitsCN.com MySQL学习足迹记录11--分组数据--GROUP BY,HAVING 1.创建分组GROUP BY 先列出所有的vend_id,以便作对比 mysql> SELECT vend_id FROM products;+---------+| vend_id |+---------+| 1001 1001

bitsCN.com

MySQL学习足迹记录11--分组数据--GROUP BY,HAVING

1.创建分组GROUP BY

先列出所有的vend_id,以便作对比

 mysql> SELECT vend_id FROM products;+---------+| vend_id |+---------+| 1001 || 1001 || 1001 || 1002 || 1002 || 1003 || 1003 || 1003 || 1003 || 1003 || 1003 || 1003 || 1005 || 1005 |+---------+14 rows in set (0.00 sec) 用GROUP BY进行分组mysql> SELECT vend_id,COUNT(*) AS num_prods -> FROM products #先分组,再分别计算COUNT(*) -> GROUP BY vend_id;+---------+-----------+| vend_id | num_prods |+---------+-----------+| 1001 | 3 || 1002 | 2 || 1003 | 7 || 1005 | 2 |+---------+-----------+4 rows in set (0.00 sec)

TIPS:

*如果列中有多行NULL值,它们将分为一组

*GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前

2.过滤分组HAVING

*HAVING 与 WHERE 的区别:

WHERE过滤行,而HAVING过滤分组

 eg: mysql> SELECT vend_id,COUNT(*) AS num_prods -> FROM products -> GROUP BY vend_id -> HAVING COUNT(*)>2; #从结果中过滤不符合COUNT(*)>2的组+---------+-----------+| vend_id | num_prods |+---------+-----------+| 1001 | 3 || 1003 | 7 |+---------+-----------+2 rows in set (0.00 sec)

* WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤,所以,WHERE排除的行不包括在分组中

 eg: 先列出原始数据作对比mysql> SELECT vend_id,prod_price FROM products -> ORDER BY prod_price;+---------+------------+| vend_id | prod_price |+---------+------------+| 1003 | 2.50 || 1003 | 2.50 || 1002 | 3.42 || 1003 | 4.49 || 1001 | 5.99 || 1002 | 8.99 || 1001 | 9.99 || 1003 | 10.00 || 1003 | 10.00 || 1003 | 13.00 || 1001 | 14.99 || 1005 | 35.00 || 1003 | 50.00 || 1005 | 55.00 |+---------+------------+14 rows in set (0.00 sec)mysql> SELECT vend_id,COUNT(*) AS num_prods -> FROM products -> WHERE prod_price >14 #WHERE过滤后只剩下上表中最后3条记录, -> GROUP BY vend_id #HAVING再过滤分组后vend_id为不符合COUNT(*) >=2组 -> HAVING COUNT(*) >=2;+---------+-----------+| vend_id | num_prods |+---------+-----------+| 1005 | 2 |+---------+-----------+1 row in set (0.00 sec)

3. 分组和排序

GROUP BY和ORDER BY的区别

*ORDER BY指定的条件可以是任意列

*GROUP BY指定的条件只可能使用选择列或列表达式

TIPS:

一般在使用GROUP BY子句时,也应该给出ORDER BY子句

Examples:

先列出原始数据:

 mysql> SELECT order_num,quantity,item_price FROM orderitems;+-----------+----------+------------+| order_num | quantity | item_price |+-----------+----------+------------+| 20005 | 10 | 5.99 || 20005 | 3 | 9.99 || 20005 | 5 | 10.00 || 20005 | 1 | 10.00 || 20006 | 1 | 55.00 || 20007 | 100 | 10.00 || 20008 | 50 | 2.50 || 20009 | 1 | 10.00 || 20009 | 1 | 8.99 || 20009 | 1 | 4.49 || 20009 | 1 | 14.99 |+-----------+----------+------------+11 rows in set (0.00 sec)mysql> SELECT order_num,SUM(quantity*item_price) AS ordertotal -> FROM orderitems -> GROUP BY order_num -> HAVING SUM(quantity*item_price) >= 50;+-----------+------------+ #未用ORDERBY指定排序,结果可能不是想要的,例如按ordertotal升序| order_num | ordertotal |+-----------+------------+| 20005 | 149.87 || 20006 | 55.00 || 20007 | 1000.00 || 20008 | 125.00 |+-----------+------------+4 rows in set (0.00 sec)mysql> SELECT order_num,SUM(quantity*item_price) AS ordertotal -> FROM orderitems -> GROUP BY order_num -> HAVING SUM(quantity*item_price) >=50 -> ORDER BY ordertotal; # 用ORDERBY指定排序方式+-----------+------------+| order_num | ordertotal |+-----------+------------+| 20006 | 55.00 || 20008 | 125.00 || 20005 | 149.87 || 20007 | 1000.00 |+-----------+------------+4 rows in set (0.01 sec)


bitsCN.com

文档

MySQL学习足迹记录11--分组数据--GROUPBY,HAVING_MySQL

MySQL学习足迹记录11--分组数据--GROUPBY,HAVING_MySQL:bitsCN.com MySQL学习足迹记录11--分组数据--GROUP BY,HAVING 1.创建分组GROUP BY 先列出所有的vend_id,以便作对比 mysql> SELECT vend_id FROM products;+---------+| vend_id |+---------+| 1001 1001
推荐度:
标签: 记录 分组 数据
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top