GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想

你用了GROUP BY 按  ITEM.ITEMNUM 这个字段分组,那其他字段内容不同,变成一对多又改如何显示呢,比如下面所示

A  B
1  abc
1  bcd
1  asdfg

select A,B from table group by A
你说这样查出来是什么结果,

A  B
    abc
1  bcd
    asdfg

右边3条如何变成一条,所以需要用到聚合函数,比如

select A,count(B) 数量 from table group by A
这样的结果就是
A  数量
1   3

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面

order by 和group by的区别

order by 从英文里理解就是行的排序方式,

默认的为升序

order by 后面必须列出排序的字段名,可以是多个字段名。

它不需要查询结果中出现order by的栏位.

更改Order by里的栏位只会影响查询结果的顺序,而不影响查询出的记录总数,和每条记录的内容.

group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。 什么是“聚合函数”?像sum()、count()、avg()等都是“聚合函数” 使用group by 的目的就是要将数据分类汇总。

group by是按指定的列对满足Where条件的所有记录分组,并对组内的一些数值型栏位计算出每组的一个统计指标,如求和、求个数、求平均值、求最大值、求最小值、、、、、、、
它对查询结果有个要求:查询结果中的出现的栏位必须是Group by中栏位的子集。
更改Group by里栏位的顺序不会对查询结果有任何影响;
但是更改Group by的栏位,会对查询得到的记录数量,以及各个汇总函数的结果造成影响。

一般如:
select 单位名称,count(职工id),sum(职工工资) form [某表] group by 单位名称
这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总额。

在sql命令格式使用的先后顺序上,group by 先于 order by。

select 命令的标准格式如下:
SELECT select_list [INTO new_table] FROM table_source [WHERE search_condition] [GROUP BY group_by_expression] [HAVING search_condition] [ORDER BY order_expression [ASC|DESC]]

order by 是按字段排序
group by 是按字段分类

参考:http://wenku.baidu.com/view/a9aeaec75fbfc77da269b144.html

bicabo

SQL中的Where,Group By,Order By和Having

说到SQL语句,大家最开始想到的就是他的查询语句:

select * from tableName;

这是最简单的一种查询方式,不带有任何的条件。

当然在我们的实际应用中,这条语句也是很常用到的,当然也是最简单的。在考虑到性能的时候,我们一般不这么写!具体怎么写,请关注后续的文章。。。

下面我们着重的看下文章标题所提到的几个子句。

一、Where

在英文中翻译为:在哪里,在什么地方。

在SQL语句中又该如何进行翻译呢?

如下一句:

select * from tableName where id="2012";

就是寻找表tableName中,id=2012的记录。

这里的where对查询的结果进行了筛选。只有满足where子句中条件的记录才会被查询出来。

对于where子句没什么高深的东西,而且也是最常见的东西,大家都太熟了。在这里不进行过多的介绍哈!

二、Group By

group by子句,我们放在select子句中的列必须也要放在group by子句中,除非在select子句中不指定任何列。 这句总感觉有问题?请大牛指点。

我们先看上面的这个表格,假如现在让你找出Apple在China,Japan,USA的平均价格,你怎么办?

我们可以这么做:select avg(price) from tablename where fruitname="apple";

Group By 一般是和一些聚合函数一起使用,比如上面我们用到的求平均的函数avg,还有求和sum,求个数count,求最大max,求最小min and so on.

对于上表,求每种水果的最大的价格:select fruitname,productplace,max(price) from tablename group by fruitname

Group By 还有一个重要的合作对象,他就是having

三、Having

我们用Group By 进行分组后,如何对分组后的结果进行一个筛选呢?having来帮您解决这个难题。

1.首先看一个例子:求平均价格在3.0以上的水果

如果我们使用这个:

select fruitname,avg(price) from tablename where avg(price)>=3.0 group by fruitname ;

这样能否达到我们的要求呢?

答案是否定的,因为where子句不能使用聚合函数。为了解决这个问题,我们来用下我们的杀手锏,他就是Having;

改写如下:select fruitname,avg(price) from tablename group by fruitname having avg(price)>=3.0;

2.我们继续看Having的另外一个匪夷所思

select fruitname,avg(price) from tablename group by fruitname having price<2.0;

这个查询的结果你们觉得会是什么呢?

没错,就是 orange 0.8 ;只有这一条记录

为什么呢?为什么Apple没有被查到呢,因为apple的有的价格超出了2.0.

另外运算符in也可以用在having 子句。

select fruitname,avg(price) from tablename group by fruitname having fruitname in ("orange","apple");

四、Order By

Order By是对查询的结果进行一个再排序的过程,一般放在查询语句的最后,可以是单列,也可以实现多列的排序。

分为升序asc和降序desc,默认的为升序。

Order By单列的排序比较简单,多列的也不麻烦。

select * from tablename group by friutname order by fruitname asc,price desc.

转自:http://blog.csdn.net/qitian0008/article/details/7840845

SQL中的Where,Group By,Order By和Having的用法/区别相关推荐

  1. sql 中distinct和group by

    sql中distinct和group by都可以用于去重复,distinct是将重复的行从结果中出去,group by是按指定的列分组.区别是group by 中可以包含聚合函数. 如下所示的表结构, ...

  2. mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法

    需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性,        CASE           ...

  3. SQL中 where, group by,having,order by 的重点

    当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序  2010-06-06 15:34  使用count(列名)当某列出现null值的时候, ...

  4. mysql的group语句_MySQL中distinct与group by语句的一些比较及用法讲解

    这篇文章主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作中的用法有很多相似之处,需要的朋友可以参考下 在数据表中记录了用户验证时使用的书目,现在想取出所有书 ...

  5. SQL中的left outer join,inner join,right outer join用法详解1

    LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行. LEFT JOIN 关键字语法 SELECT column_ ...

  6. SQL中的left outer join,inner join,right outer join用法

    使用关系代数合并数据 1 关系代数 合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的. 在关系代数的形式化语言中: ?          用表.或者数据集合表示关系或者实体. ...

  7. SQL中的left outer join,inner join,right outer join用法 (左右内连接)

    SQL语句中的left outer join,inner join,right outer join用法 left outer join=left join ,   right outer join= ...

  8. SQL中的left outer join,inner join,right outer join用法详解

    SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同. 连接类型                                       ...

  9. sql中having、group by用法及常用聚合函数

    having是用在聚合函数的用法.当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算.运算完后就要用到HAVING 的用法了,就是进行判断了. 注意:sele ...

最新文章

  1. python3操作mysql教程_python3操作mysql教程
  2. 接口冲突的一种解决方法
  3. 【BZOJ3997】[TJOI2015]组合数学 最长反链
  4. Vue 学习第八天
  5. Android Service基本使用
  6. 【VS开发】VS2010中导入ActiveX控件
  7. Oracle将数据库中的表数据导入到另一个数据库中
  8. k折交叉验证优缺点_K最近邻(KNN)算法
  9. 奇异矩阵能lu分解条件_矩阵的酉不变范数,樊畿控制定理,次可乘性质,p次对称度规函数...
  10. Ubuntu中octopress安装
  11. Redis初识、设计思想与一些学习资源推荐
  12. 使用SNMP4J的SNMP Walk示例
  13. mysql rrd_时间序列数据库rrd启动
  14. 如何删除windows 10系统桌面的所有快捷图标
  15. 在PPT中看不到边框
  16. 【详解】机器学习库-Matplotlib+Numpy+Pandas
  17. 数字通信基本原理与设备
  18. NYU计算机系,NYU的Computer Science and Engineering「纽约大学计算机科学与工程系」
  19. mt4怎么样修改服务器,mt4怎样修改服务器地址
  20. AndroidStudio4.1 不报错,不爆红

热门文章

  1. firefox推荐插件
  2. Vista光线效果photoshop教程
  3. Saas 平台,多域名,泛域名.如何做分站点的统计之解决方案
  4. 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)
  5. mysql主从复制实战
  6. Spring MVC POJO传参方式
  7. Javascript - 栈 和 单链表
  8. MAC YII 安装步骤
  9. three20 阅读到的代码
  10. 小猿圈之git 的几个好用自定义命令