`
uule
  • 浏览: 6303146 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

关于group by 两个或以上条件的分析

阅读更多

首先group by 的简单说明:

   group by 一般和聚合函数一起使用才有意义,比如 count sum avg等,使用group by的两个要素:
   (1) 出现在select后面的字段 要么是是聚合函数中的,要么就是group by 中的.
   (2) 要筛选结果 可以先使用where 再用group by 或者先用group by 再用having

下面看下 group by多个条件的分析:

在SQL查询器输入以下语句
create table test
(
a varchar(20),
b varchar(20),
c varchar(20)
)

insert into test values(1,'a','甲')
insert into test values(1,'a','甲')
insert into test values(1,'a','甲')
insert into test values(1,'a','甲')
insert into test values(1,'a','乙')
insert into test values(1,'b','乙')
insert into test values(1,'b','乙')
insert into test values(1,'b','乙')

第一次查询

select * from test; 结果如下图:

 

结果中 按照b列来分:则是 5个a 3个b.


按照c列来分:则是 4个甲 4个乙.


第二次 按照 b列来分组 代码如下
select   count(a),b from test group by b

第三次 按照 c列来分组 代码如下
select count(a),c from test group by c


第四次 按照 b c两个条件来分组
select count(a),b,c from test group by b,c

第五次 按照 c b 顺序分组
select count(a),b,c from test group by c,b

可以看出 group by 两个条件的工作过程:

先对第一个条件b列的值 进行分组,分为 第一组:1-5, 第二组6-8,然后又对已经存在的两个分组用条件二 c列的值进行分组,发现第一组又可以分为两组 1-4,5


来源:http://hi.baidu.com/w_xiaofeng20xx/item/05a2bf154020b97a1009b5e0

  • 大小: 7.4 KB
  • 大小: 2.9 KB
  • 大小: 2.7 KB
  • 大小: 4.1 KB
  • 大小: 4.1 KB
分享到:
评论
5 楼 CmdSmith 2017-02-17  
 
4 楼 wouldmissy 2016-07-25  
太棒了, 感谢。  不过,如果有加上where条件的sql就更好了
例:再添加一个d列,d列的内容为X Y X Y X Y X Y
select count(a) from test where d = y group by b,c

会是什么样的结果呢?
3 楼 di1984HIT 2016-03-18  
xuexile xuexile
2 楼 Xujian0000abcd 2015-12-12  
写的非常清楚
1 楼 wangjinbo 2015-09-30  
阿尔法分发烧

相关推荐

    mysql使用GROUP BY分组实现取前N条记录的方法

    GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法。 这是测试表(也不知道怎么想的,当时表名直接敲了个aa,汗~~~~): 结果: 方法一: 代码如下:SELECT a.id,a.SName,a.ClsNo...

    数据库内测版.doc

    9.关于查询语句的SELECT子句为SELECT A,B,C *D,则不能使用的GROUP BY子句是(GROUP BY A) 10.建立索引的优点之一是(保证数据的唯一性、加快数据检索速度、加速表与表之间的连接、减少查询中分组和排序的时间、提高...

    MySQL优化GROUP BY(松散索引扫描与紧凑索引扫描)

    满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建...

    MySQL分组查询Group By实现原理详解

     在MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的场景下使用。下面我们分别针对这三种实现方式做一个分析。  1、使用松散...

    浅谈pandas用groupby后对层级索引levels的处理方法

    层及索引levels,刚开始学习pandas的时候没有太多的操作关于groupby,仅仅是简单的count、sum、size等等,没有更深入的利用groupby后的数据进行处理。近来数据处理的时候有遇到这类问题花了一点时间,所以这里记录...

    slice-group-by:group_by Haskell函数的实现,仅可对str进行切片

    切片分组 ,提供了用于通过函数定义的组高效地遍历slice和str的功能,该函数指定两个元素是否在同一组中。... use slice_group_by :: GroupBy;let slice = & [ 1 , 1 , 1 , 3 , 3 , 2 , 2 , 2 ];let mut iter = slic

    Django中使用group_by的方法

    本文实例讲述了Django中使用group_by的方法。分享给大家供大家参考。具体分析如下: 在Django中怎样使用group_by语句呢?找了很多资料,都没有看到好的,在这里分享两种方法给大家: 首先,我们先建一个简单的模型。...

    MySQL根据某一个或者多个字段查找重复数据的sql语句

    1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、查询出所有数据进行分组之后,和重复数据...

    实例详解Group by和Having子句

    查询有多个员工的工资不低于2000的部门编号(就是说如果一个部门的员工大于2000的人数有两个或两个以上就查询出来) sql语句: select [DEPARTMENT_ID],count([SALARY]) from [DEPARTMENT] where [SALARY]>'2000' ...

    MySQL5.7 group by新特性报错1055的解决办法

    切换到5.7之后,突然发现原来的一些sql运行都报错,错误编码1055,错误信息和sql_mode中的“only_full_group_by“有关,到网上看了原因,说是mysql5.7中only_full_group_by这个模式是默认开启的 解决办法大致有两种...

    MySQL异常:[Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nona…

    [Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column ‘information_schema.PROFILING.SEQ’ which is not functionally dependent on columns in GROUP ...

    基于mysql实现group by取各分组最新一条数据

    前言: group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢? 本文提供两种实现方式。 一、准备数据 ... 二、三种实现方式 1)先order by之后再分组: ...

    pymongo中group by的操作方法教程

    使用 pymongo 进行 group by 操作有两种基本方式,他们都是 mongodb 的原生命令,于 Collection 对象上调用。 def aggregate(self, pipeline, **kwargs): def group(self, key, condition, initial, reduce, ...

    MySQL无GROUP BY直接HAVING返回空的问题分析

    我们先来做个试验,验证这种情况。这是表结构,初始化两条记录,然后试验: 代码如下:root@localhost : plx 10:25:10> show create table t2\G*************************** 1. row *************************** 

    LINQ_sql版

    LINQ关键字 from 指定数据源和范围变量 where 根据布尔表达式(由逻辑与 或 等组成)从数据源中筛选元素 ...join 按照两个指定匹配条件来联接俩个数据源 let 产生一个用于查询表达式中子表达式查询结果的范围变量

    Mysql-DQL(分组查询)

    进阶5:分组查询 语法: select 查询列表 from 表 【where 筛选条件】 group by 分组的字段 ...group by 子句支持单个字段分组,多个字段分组、函数、表达式、可以接排序放在最后 分组函数: count sum max

    MySQL面试题,使用GROUP BY、join等查询方法查询工资表

    假设有两个表,一个是订单表(Orders),一个是订单详情表(OrderDetails)。订单表(Orders)包含以下字段:订单号(OrderID)、客户ID(CustomerID)、订单日期(OrderDate)。订单详情表(OrderDetails)包含以下...

    实验一 数据定义与简单查询实验

    在“图书”表中,增加两个字段,分别为“数量”和“购买日期”。在“借阅”表中增加一个“还书日期”字段。 6、用企业管理器在上述三个表中输入部分虚拟数据。 7、在查询分析器中实现基于单个表的查询 ① select ...

    ORACLE重复记录查询.docxORACLE

    delete from people where peopleId in (select peopleId from people group by peopleId having count (peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId...

Global site tag (gtag.js) - Google Analytics