1.在使用 GROUP BY 子句时,Select列表中的所有列必须是聚合列(SUM,MIN/MAX,AVG等)或是GROUP BY 子句中包括的列。同样,如果在SELECT 列表中使用聚合列,SELECT列表必须只包括聚合列,否则必须有一个GROUP BY 子句。例如:  

select customerid,salespersonid,count(*)
from sales.salesorderheader
where customerid <=
group by customerid,salespersonid
order by customerid,salespersonid

2.聚合函数。聚合函数用于GROUP BY 字句,用于聚合分组的数据。聚合函数在和GROUP BY子句一起使用时显示出其强大的功能。但聚合函数的使用不限于分组查询;如果查询语句中使用了聚合函数,而没使用GROUP BY子句,则聚合函数是用于聚合整个结果集(匹配WHERE子句的所有行)。当不使用GROUP BY 子句时,在SELECT列表中某些聚合函数只能与其他的聚合函数一起使用,即聚合函数必须使用GROUP BY 子句才能在SELECT列表中与列明配对。例如,不使用GROUP BY子句,SELECT列表中AVG只能和SUM对应,但不能对应特定列。

3.AVG

 AVG函数用于计算平均值。

 For example:  

select salesorderid,avg(orderqty) as orderqtyavg
from sales.salesorderdetail
where salesorderid in (,,)
group by salesorderid

4.MIN/MAX

顾名思义,MIN/MAX用于计算所选择列分组的最小值与最大值。

For example:

select salesorderid,min(orderqty) as orderqtyavg
from sales.salesorderdetail
where salesorderid in (,,)
group by salesorderid

在将查询改为Max函数,For example:

select salesorderid,max(orderqty) as orderqtyavg
from sales.salesorderdetail
where salesorderid in (,,)
group by salesorderid

5.除了Count(*)函数外,所有的聚合函数都忽略NULL值。要考虑到这一点对聚合结果的重要影响。许多用户在求平均值时,把数值类型字段中的NULL值看作0,但实际上NULL值与0并不等同,并不能这样使用。如果对有NULL值的列执行AVG函数或其他聚合函数,NULL值将不会计入聚合值中,除非使用如COALESCE()或ISNULL()等函数,将NULL值转换成非NULL值。

Count函数可与GROUP BY 字句联合使用。

6.使用Having子句给分组设置条件

如果要将查询条件放到分组之后,则可以使用Having子句。

Having 子句仅用于带有GROUP BY 子句的查询语句中。WHERE子句应用于每一行(在变成一组的某一部分之前),而HAVING子句应用于分组的聚合值。

7.Distinct和All

可以在任意聚合函数中使用Distinct谓词,即使聚合函数中使用Distinct谓词没有实际意义。例如,在AVG函数中使用Distinct没有任何意义。

很少在查询语句中使用All谓词,毫无疑问,All与Distinct谓词含义相反。Distinct谓词用于过滤掉重复的行,而All指包括所有的行。All是任意Select语句的默认值,但有Union的Select语句除外。

8.Insert。Insert需要注意的是插入数据时候的格式问题。插入数值不需要使用引号,而插入字符数据时要使用引号。但插入date数据类型时需要使用引号(实际上,其作为字符串输入,然后再转换成日期)。

多行插入:多行插入要用逗号分隔,例如:

  INSERT INTO Sales

    (StoreCode, OrderNumber, OrderDate, Quantity, Terms, TitleID)

  VALUES

    ('TST2', 'TESTORDER2', '01/01/1999', 10, 'NET 30', 1234567),

    ('TST2', 'TESTORDER3', '02/01/1999', 10, 'NET 30', 1234567);

这样可以使用一条插入语句插入2条数据。

9.INSERT INTO ......SELECT 语句

语法结构:INSERT INTO <table name>

       [<column list>]

     <SELECT statement>

10.

sql 学习之 group by 及 聚合函数的更多相关文章

  1. 关于GROUP BY和聚合函数

    可以这样去理解group by和聚合函数 转自 http://www.cnblogs.com/wiseblog/articles/4475936.html 写在前面的话:用了好久group by,今天 ...

  2. Microsoft SQL Server学习(五)--操作符聚合函数

    算术运算符 逻辑运算符 比较运算符 聚合函数 算术运算符(+ - * / ) select score*2 as 成绩翻倍 from class_A update class_A set score= ...

  3. 可以这样去理解group by和聚合函数

    写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是 ...

  4. 可以这样去理解group by和聚合函数(转)

    http://www.cnblogs.com/wuguanglei/p/4229938.html 写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不 ...

  5. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    拖了一个星期,终于开始写第三篇了.走起! 聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均 ...

  6. group by 和 聚合函数

    1.在oracle中 select * from Table group by id 会报错. 会报不是group by 表达式.为什么一定不能是 * ,而必须是分组的列或者某个列的聚合函数. 在my ...

  7. group by 和 聚合函数的使用

    有这样一个表数据: 学生姓名,学生手机号,上课日期,上课科目 科目分: 语文.数学.英语.计算机 要求统计一个这样子的结果: 学生姓名,学生手机号,第一次上课日期,迄今一共上了多少节课,上的最多的科目 ...

  8. 第二天,导出文件sql,查询,视图view,聚合函数,反模式,字符串处理函数

    //把数据库导出到脚本文件mysqldump -uroot -p1234 --databases abc > d:/a/abc.sql CREATE TABLE stud( id INT PRI ...

  9. 一文让你彻底理解group by和聚合函数

    知道group by是进行分组查询,但是一直觉得对其理解得不够透彻,在网上扒了一篇文章,我认为写得非常好. 为什么不能够select * from Table group by id,为什么一定不能是 ...

随机推荐

  1. javascript之文档碎片,文档碎片在理论上可以提高DOM操作的执行效率

    刚来到这里,趁着还没有忘记,来记录一下,昨晚学习的一个知识点——JavaScript中的文档碎片. 一.对文档碎片的基本认识 文档碎片可以提高DOM操作性能(理论上,注意!!理论上的) 文档碎片原理 ...

  2. Android(java)学习笔记201:网络图片浏览器的实现(ANR)

    1.我们在Android下,实现使用http协议进行网络通信,请求网络数据.这里是获取网络上的图片信息,让它可以显示在手机上: 但是我们这个手机连接网络是很费时间,如果我们在主线程(UI线程)中写这个 ...

  3. NUll在oracle与sqlserver中使用相同与区别

    最近在使用Oracle进行开发,遇到很多与以前使用sqlserver的不同语法.今天遇到null在两种数据库上面操作上的差别,在此记录两种数据库上的差异. null 与字符串相加 1.在oracle中 ...

  4. Python开发【第十三篇】:jQuery(二)

    http://www.bubuko.com/infodetail-1438296.html 处理完毕需要整理贴进来 Python之路[第十三篇]jQuery案例-Form表单&插件及扩展   ...

  5. 【转】Angularjs Controller 间通信机制

    在Angularjs开发一些经验总结随笔中提到我们需要按照业务却分angular controller,避免过大无所不能的上帝controller,我们把controller分离开了,但是有时候我们需 ...

  6. U3D Trigger事件触发

    使用Trigger事件触发,可以达到虽然触发了,可是不改变任何效果. 这个是进入时候触发的: void OnTriggerEnter2D(Collider2D other) { print (othe ...

  7. java.util.Random深入理解

    java.util.Random next方法的原理 比较好的参考文档: http://isky001.iteye.com/blog/1339979 package random.utilrandom ...

  8. DIV布局之道三:DIV块的覆盖,DIV层遮盖其他DIV

    DIV布局网页的第三种方式:覆盖.DIV覆盖方式经常应用于网页弹出框的制作,例如在网店系统中,当用户没有登录时,点击购买,系统弹出一个登陆框. 请看代码: HTML部分: XML/HTML Code复 ...

  9. maclean-【性能调优】Oracle AWR报告指标全解析 学习笔记

    原文链接:http://www.askmaclean.com/archives/performance-tuning-oracle-awr.html AWR小技巧 手动执行一个快照: Exec dbm ...

  10. SGU 207.Robbers

    题意: 有m(m<=10^4)个金币分给n(n<=1000)个人,第i个人期望得到所有金币的xi/y,现在给分给每个人一些金币ki使得∑|xi/y-ki/m|最小. Solution: 首 ...