一、创建分组

  上面所讲的语句都是建立在表的所有数据或匹配特定的where子句的数据上进行的。是否能够进行分组,在进行汇总计算哪儿?例如:要想返回每个供应商提供的产品数目怎么办?

  分组是在select语句的group by子句中建立的,如下:

  select vend_id,count(*) as num_prods from products group by vend_id;

  上面语句使用group by子句对vend_id排序并分组数据,也就是按供应商编码进行分组,把相同的编码进行合并,并且求出其产品个数。

  group by 子句指示mysql分组数据,然后对每个组而不是整个结果集进行聚集。

 

二、group by 注意事项

  1、group by 子句可以包含任意数目的列。

  2、如果在该子句中嵌套了分组,指定的所有列都一起进行计算。

  3、该子句选中列出的每个列都必须是检索列或者有效的表达式(不能是聚集函数)。如果在select中使用表达式,则必须在group by 子句中指定相同的表达式,不能使用别名。

  4、除聚集计算语句外,select语句中的每个列都必须在group by 子句中给出。

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

  6、group by 必须出现在where子句之后,order by子句之前。

  其中rollup关键字的作用很明显,它可以显示出不进行分组所有产品个数(之前没进行分组的不显示)。如下:

  select vend_id ,count(*) as num from products group by vend_id with rollup;

  

三、过滤分组

  mysql还可以过滤分组,我们不能使用where子句,它仅仅是对行进行操作,而且在数据分组前进行过滤,不能多分组数据操作。

  我们只能使用having子句,他能用来过滤分组。它在数据分组后进行过滤。

  having支持所有的where操作符。如下:

  select cust_id,count(*) as orders from orders group by cust_id  having count(*)>=2;

  以上语句描述的是找出两个以上订单的那些分组。

  select vend_id,count(*) as num_prods from products where prod_price>=10 group by vend_id having count(*)>=2

  以上语句表达的是列出具有2个以上、价格10以上的产品供应商。

  *:聚集函数可以在select的检索中,可以在分组之后的having过滤中,但是不可以在where中;

四、分组和排序

  group by 和 order by具有不同的用处

  

  group by 每次并不是以分组的顺序输出,而order by却能提供顺序。

  select order_num,sum(quantity*item_price) as ordertotal from orderitems group by order_num having sum(qquantity*itemprice)>=50;  

  以上并不排序,如果需要排序,需要在后面加上order by ordertotal

mysql-数据分组的更多相关文章

  1. MySQL数据分组Group By 和 Having

    现有以下的学生信息表: 若果现在想计算每个班的平均年龄,使用where的操作如下: SELECT Cno AS 班级, AVG(Sage) AS 平均年龄 FROM stu ; 这样的话,有多少个班就 ...

  2. mysql数据分组

    创建分组 分组是在SELECT语句中的GROUP BY 子句中建立的. 例: SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY ...

  3. MySQL数据分组GROUP BY 和HAVING

    对于分组的理解,可以这样:对GROUP BY子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作. 举例如下:在产品表中,检索每一个供应商提供的商品的数量. mysql> SELEC ...

  4. [mysql] Mysql数据分组GROUP BY 和HAVING,与WHERE组合使用

    理解分组,可以这样:对GROUP BY子句后面跟随的列名进行分组,然后对每一个分组而不是整个表进行操作. 举例:在产品表中,检索每一个供应商提供的商品的数量. mysql> SELECT ven ...

  5. Mysql 数据分组取某字段值所有最大的记录行

    需求: 表中同一个uid(用户)拥有多条游戏等级记录,现需要取所有用户最高等级(level)的那一条数据,且时间(time)越早排越前.这是典型的排名表 +------+-------+------- ...

  6. MySQL:基础—数据分组

    MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...

  7. MySQL 对分组后的同类数据进行拼接字符串

    MySQL 对分组后的同类数据进行拼接字符串 写后台方法时遇到个问题,需要将表内同一订单号的操作记录流水进行简单拼接输出,不想取出来再操作,找了个mysql的方法直接操作 //group_concat ...

  8. MySQL聚合函数与数据分组

    我们最常需要的是汇总数据而不是把他们实际检索出来 确定表中行数(或满足某个条件或包含某个特定值的行数) 确定表中行组的和 找出表列(或所有行或特定列)的最大值,最小值和平均值 聚集函数是运行在行组上, ...

  9. mysql 数据操作 单表查询 group by 分组 目录

    mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...

  10. MySQL 数据表操作

    MySQL 数据表操作 创建MySQL数据表需要以下信息: -表名: -表字段名: -定义每个表字段: 一.创建数据表 1)mysql> create  table  table_name (c ...

随机推荐

  1. gdb学习-checkpoint,watch

    checkpoint的内容参考: http://blog.chinaunix.net/uid-23629988-id-2943273.html 这一篇主要是checkpoint,在next之前加che ...

  2. jQuery中focusin()和focus()、find()和children()的差别

    jQuery中focus()和focusin().focus()和children()的差别 focus()和focusin() focus()和focusin()的差别在于focusin()支持事件 ...

  3. activity生命周期的onPause和onStop

    搞了这么长时间的android开发,却对一些基础的东西一直模棱两可...就比方这个onPause和onStop. 假设从一个界面,跳到还有一个界面,那么是调用哪个呢? 经过我的实验.搞清楚了.onPa ...

  4. Vuejs2.0学习之二(Render函数,createElement,vm.$slots,函数化组件,模板编译,JSX)

    时隔一周多,因为一些别的事情绊住了,下面接着写.中间这段时间也有看官方文档,发现正如他所说90%的基础内容都一样,所以这里直接跳到我比较关注的东东上,要是想看看哪些不一样,可以参考这个http://v ...

  5. php,二维数组的输出出现了问题,提示:Notice: Array to string conversion

    <?php $arr=array(array("111","222","333"),array("444",&qu ...

  6. zzulioj--1712--神秘的数列(水题)

    1712: 神密的数列 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 122  Solved: 92 SubmitStatusWeb Board De ...

  7. 时间处理工具类TimeUtil

    转自:https://cnblogs.com/ityouknow/p/5662753.html 功能 Date与String之间的互相转换,以及一些特殊格式的时间字符串处理 代码 /** * 类名:T ...

  8. [JZOJ 5465] [NOIP2017提高A组冲刺11.9] 道路重建 解题报告 (e-dcc+树的直径)

    题目链接: http://172.16.0.132/senior/#main/show/5465 题目: 小X所居住的X国共有n个城市,有m条无向道路将其连接.作为一个统一的国家,X 城的任意两个城市 ...

  9. sql-查看执行计划的方法

    sql执行计划:把SQL语句拆分为每个的操作步骤组合,按照一定的顺序执行得出结果,查看并看懂执行计划是调优的关键步骤 查看执行计划的方法 DBMS_XPLAN包 sql*plus AUTO trace ...

  10. 【转载】大型系统中使用JMS优化技巧

    [本文转自:http://www.javabloger.com/article/sun-openmq-jms-large-scale-systems.html] 我们先来看看在Sun OpenMQ系统 ...