理解分组,可以这样:对GROUP BY子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作。

举例:在产品表中,检索每一个供应商提供的商品的数量。

mysql> SELECT vend_id,COUNT(*) AS num_prods FROM products GROUP BY vend_id;

结果:

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

| 1001 | 3 |

| 1002 | 2 |

| 1003 | 7 |

| 1005 | 2 |

+---------+-----------+

4 rows in set (0.01 sec)

分析:

首先根据vend_id进行分组,然后对每一个分组在进行COUNT聚集。当检索的目的是针对每一个记录进行检索的时候,想到用GROUP BY,例如这里是针对每一个供应商。

GROUP BY的规定:

1、GROUP BY 后面可以包含多个列,这就是嵌套。

2、如果GROUP BY进行了嵌套,数据将在最后一个分组上进行汇总。

3、GROUP BY子句中列出来的每个列必须是检索列或有效的表达式(但不能是聚集函数),如果在SELECT中使用了表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。

4、除了聚集语句外,SELECT语句中的每一个列都必须在GROUP BY子句中给出。

5、如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL,它们将作为一个分组返回。

6、GROUP BY子句必须在WHERE 子句之后,ORDER BY 子句之前。

过滤分组结果

我们知道WHERE 子句用于过滤结果,但是对于分组的过滤WHERE子句不行。

因为WHERE子句,是针对行的过滤。要对分组结果进行过滤,必须使用HAVING子句,HAVING子句能针对分组的结果进行过滤。

举例:

在订单表中,检索出具有两个以上订单的客户id以及订单数量。

分析:

在这个检索需求中,需要先根据客户id进行分组,然后过滤出订单数量大于2的分组。

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

结果:+---------+--------+

| cust_id | orders |

+---------+--------+

| 10001 | 2 |

+---------+--------+

1 row in set (0.00 sec)

与WHERE组合使用(先用WHERE过滤)

有的时候,GROUP BY和WHERE子句也要组合使用。比如:在产品表中检索出能提供2个以上商品,并且价格高于10的供应商。

分析:

首先,检索的是供应商,因此SELECT子句应该是SELECT vend_id

其次,产品表中,有价格这一列,因此对于价格高于10的条件的过滤要使用WHERE子句。SELECT vend_id FROM prodcuts WHERE prod_price>=10.

接着,对vend_id进行分组,这样就可以得到每个vend_id的价格高于10的商品数量,GROUP BY放到WHERE子句后。SELECT vend_id FROM prodcuts WHERE prod_price>=10 GROUP BY vend_id.

最后,对分组的结果过滤,过滤出2个以上商品的分组

mysql> SELECT vend_id,COUNT(*) AS num_prods FROM products WHERE prod_price>=10 GROUP BY vend_id HAVING COUNT(*)>=2;

结果:

+---------+-----------+

| vend_id | num_prods |

+---------+-----------+

| 1003 | 4 |

| 1005 | 2 |

+---------+-----------+

2 rows in set (0.00 sec)

对分组结果进行排序

在订单明细表中,检索出订单总价格高于等于50的订单号以及订单总价格

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;

结果是:

+-----------+------------+

| order_num | ordertotal |

+-----------+------------+

| 20006 | 55.00 |

| 20008 | 125.00 |

| 20005 | 149.87 |

| 20007 | 1000.00 |

+-----------+------------+

4 rows in set (0.08 sec)

SELECT 子句的顺序

SELECT

FROM

WHERE

GROUP BY #分组

HAVING #过滤

ORDER BY #

LIMIT #限制

mysql 分桶_mysql的分组和过滤桶where的组合运用相关推荐

  1. mysql 分函数_mysql常见函数-分组函数

    分组函数 1.功能:用作统计使用,又称为聚合函数或统计函数或组函数. 2.分类:sum 求和.avg 平均值.max 最大值.min 最小值.count 计算个数 3.简单使用 SELECT SUM( ...

  2. mysql 分桶_使用hive脚本一键动态分区、分区又分桶以及脚本步骤详细详解(亲测成功)...

    一.动态分区以及从linux本地文件映射到hive表中. partitioned.sql脚本中的创造数据: mkdir /mytemp cd mytemp vi stu_score.txt 1,zha ...

  3. mysql 分表_MySQL如何分库分表

    数据库分库分表估计很多伙伴都没有实践过,就是因为自己公司的业务不是很多,没有那么多数据.假如有一天项目的人数上来了,你写的系统支撑不住了,希望这篇文章带给你一丝丝的思路." 前言 在面试过程 ...

  4. mysql分表_mysql分表详解

    经常听到有人说"数据表太大了,需要分表","xxxx了,要分表"的言论,那么,到底为什么要分表? 难道数据量大就要分表? mysql数据量对索引的影响 本人my ...

  5. mysql简单分表_mysql分区分表哪个好

    一,什么是e69da5e6ba9062616964757a686964616f31333365633933mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mys ...

  6. mysql分表准则_Mysql分表准则_MySQL

    bitsCN.com Mysql分表准则 Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境: 业务类型:OLT ...

  7. mysql分表技巧_MySQL分表操作的方法分析

    本节内容: mysql分表 一般来说,当数据库的数据超过了100w记录时就应该考虑分表或者分区了. 本文介绍下mysql分表的一些方法. 首先,需要想好到底分多少个表,前提当然是满足应用. 这里使用了 ...

  8. mysql分表存储_MySQL 分表存储的使用示例

    分表存储是把记录保存在不同的表表会一个关联了在这里我们来看一篇关于MySQL 分表存储的使用示例,具体的例子如下文介绍. 一般我们项目中如果数据量特别大的话通常会考虑将某一表数据进行分表处理,例如:我 ...

  9. mysql分表的原则_mysql分表规则(转)

    author:skate time:2013/05/14 Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境: ...

最新文章

  1. 干货 | 20多门AI网络课程资源(附链接)
  2. VTK:几何对象之LongLine
  3. 从入门到入土(九)手摸手教你搭建RocketMQ双主双从同步集群,不信学不会!...
  4. 阿里云存储负责人吴结生:安全可靠是云存储立身之本, 智能技术将激活存储技术新变革...
  5. 拓端tecdat|在UBUNTU虚拟机上安装R软件包
  6. Node.js mm131图片批量下载爬虫1.01 增加断点续传功能
  7. 【摄影测量】利用经度L、纬度B、大地高h及heading pitch roll飞行姿态角将IMU惯导坐标系转换到WGS84坐标系
  8. 如何彻底卸载电脑中的垃圾软件
  9. 熊孩子说“你没看过奥特曼”,赶紧用Python学习一下,没想到
  10. python爬取微信好友信息
  11. 大蟒蛇python头像_Python微信好友头像大拼图案例
  12. 名编辑电子杂志大师教程 | 如何删除电子画册中不要的页面?
  13. 什么叫做html属性,什么是html属性
  14. python beep函数_Python winsound.Beep方法代码示例
  15. 关于机器人状态估计/VIO/VSLAM中能观性/可观性/FEJ的一些直接解释
  16. SVN远程改密码的超简单的java实现
  17. alibaba otter docker 测试环境一键生成
  18. 朱有鹏嵌入式核心课程路线图
  19. 谷歌要完,百度也危了
  20. 吴恩达《机器学习系列课程》学习笔记(二):监督学习

热门文章

  1. 单周期CPU设计与实现原理分析
  2. 爱尔康与好大夫在线达成合作​;武田达泽优获批进入中国 | 跨国药企在中国...
  3. STM32应用IAP进行程序更新详解及实例
  4. python文件生成exe文件
  5. 网络加速_蓝汛安全CDN加速解决方案,维稳网络安全
  6. 电商项目测试实战(二)
  7. 大数据学习笔记(四)Hadoop集群(完全分布式)
  8. 30. 主频和时钟配置实验
  9. python 实现四则运算(一)
  10. 来自Apache(mime.types存档)的mime大全