当前位置:  数据库>sqlserver

sql分组查询与聚集函数用法

    来源: 互联网  发布时间:2014-08-29

    本文导语:  实现一个查询统计功能,一开始有点犯难,上午尝试大半天才写出统计sql语句,才发现自己sql分组查询及聚集函数没学好; 其实就是group by子句和几个聚集函数,熟练使用统计功能很简单。在此总结下今天查询统计是用到的几...

实现一个查询统计功能,一开始有点犯难,上午尝试大半天才写出统计sql语句,才发现自己sql分组查询及聚集函数没学好;
其实就是group by子句和几个聚集函数,熟练使用统计功能很简单。在此总结下今天查询统计是用到的几个sql函数。

sql聚集函数

sum函数 sum函数用于计算查询表中指定字段中所有 记录值的总和。 语法:sum(exp) 说明:该函数不计算包含null 值的字段。

例:select sum(population) from bbc
这里的sum作用在所有返回记录的 population字段上,结果就是该查询只返回 一个结果,即所有国家的总人口数。

avg函数 avg函数是用来计算特定查询字段中的一组数值的 算术平均值(将全部值的总和除以值的数目)。 语法:avg(exp) 说明:该函数只能对数值类型的字段进行计算。
例:求所有雇员薪水的平均值。
select avg(emp_salary) from employee;

count函数 count函数是用来计算查询表中的记录数。 语法:count(exp) 说明:count函数不计算具有null字段的记录,但如 果将exp设置为星号(*),则count函数将计算所有记 录的总量,包括有null的字段的记录。distinct短句可以取消指定列中的重复值 sql除了不允许对count(*)使用distinct,对其 余情况都能用distinct,但一般情况下是没有 必要用的,除非你觉得的确是需要用distinct。

min函数 min函数是用来从查询表中返回指定字段中 的最小值。 语法:min(exp)

max函数 max函数是用来从查询表中返回指定字段中 的最大值。 语法:max(exp)

group by子句

对记录的分组是通过关键字 group by 实现的, group by 后面跟着一个定义组的构成的属性列 表。 如果我们使用语句 group by a1,……, ak 我们就把关系分成了组,这样当且仅当两条记录 在所有属性 a1,……, ak 上的值达成一致,它们才 是同一组的。 sql 允许我们把一个表里面的记录用group by 分成组。 然后上面描述的聚集操作符可以应用于 这些组上 (也就是说,聚集操作符的值不再是对 所有声明的列的值进行操作, 而是对一个组的所 有值进行操作。这样聚集函数是为每个组独立地 进行计算的。)

当在查询中没有使用group by子句时,数据库就把数据表 中的所有行为作为一个组来处理。通常情况下,我们并不希 望是这样的。多数用户都能理解组的概念,但在使用的时候 却很快就陷入 麻烦中。有一个技巧是:如果有一列在 group by子句中没有提到,就必须对它进行累计。换句话 说,就是必须对select中那些不包括在group by子句中的所有列使 用上面提到过的一个函数。

请注意如果要让一个使用 group by 和聚集操 作符的查询的结果有意义, 那么用于分组的属性 也必须出现在目标列表中。 所有没有在 group by 子句里面出现的属性都只能通过使用聚集函数 来选择。 否则就不会有唯一的数值与其它字段关 联. 还要注意的是在聚集上聚集是没有意义的,比如, avg(max(sno)), 因为 select 只做一个回合 的分组和聚集.你可以获得这样的结果, 方法是 使用临时表或者在 from 子句中使用一个子 select 做第一个层次的聚集。

总结:

在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数

查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。

当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。在一个sql语句中可以有where子句和having子句。having 与where 子句类似,均用于设置限定条件。where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

用到的其它函数:

1、charindex (, )其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。此函数不能用于text 和image 数据类型。

2、convert ([ length ], [, style])

1)data_type为sql server系统定义的数据类型,用户自定义的数据类型不能在此使用。

2)length用于指定数据的长度,缺省值为30。

3)把char或varchar类型转换为诸如int或samllint这样的integer类型、结果必须是带正号或负号的数值。

4)text类型到char或varchar类型转换最多为8000个字符,即char或varchar数据类型是最大长度。

5)image类型存储的数据转换到binary或varbinary类型,最多为8000个字符。

6)把整数值转换为money或smallmoney类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。

7)bit类型的转换把非零值转换为1,并仍以bit类型存储。

8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示"+",以标识发生了这种截断。

9)用convert() 函数的style 选项能以不同的格式显示日期和时间。style 是将datatime 和smalldatetime 数据转换为字符串时所选用的由sql server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。

您可能感兴趣的文章:
  • sql分组查询(按组内个数排序)
  • SQL分组查询实例解析
  • SQL分组查询group by语句实例
  • mysql分组查询示例代码

    
 
 

您可能感兴趣的文章:

  • SQL中object_id函数的用法 iis7站长之家
  • Sql Server多行合并一行 sql分组统计
  • sql分组查询(按组内个数排序)
  • SQL分组排序去重复的小实例
  • SQL分组统计简单例子
  • 显示同一分组中的其他元素的sql语句
  • sql中获取分组排序后数据方法实例
  • SQL语句分组获取记录的第一条数据的方法
  • SQL分组查询实例解析
  • sql语句获取分组排序后数据
  • sql server分组排序之row_number()over函数的使用
  • Sql Server 分组统计并合计总数(WITH ROLLUP用法)
  • sql分组排序与分组统计技巧
  • sql server 2000/2005/2008中一句话完成分组后加序号
  • sql获取分组排序后数据的脚本
  • sql server分组查询与排序的例子
  • sql server数据分组查询脚本分析
  • SQL分组排序与分组查询统计
  • Sql Server 分组统计并合计总数及WITH ROLLUP应用
  • 以数据库字段分组显示数据的sql语句(详细介绍)
  • mysql的SQL_NO_CACHE(在查询时不使用缓存)和sql_cache用法
  • C#调用SQL语句时乘号的用法
  • sql中all,any,some用法
  • SQL事务用法begin tran,commit tran和rollback tran的用法
  • sql游标的用法简单笔记
  • sql查询语句group by用法简介
  • sql server中Exists的用法举例
  • 浅析SQL语句中GROUP BY的用法
  • sql多表级联更新update的用法举例
  • sql server中ISNULL函数与Mysql中IFNULL函数的用法
  • SQL中object_id函数的用法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在SQL中有函数,比如COUNT(*),怎样通过JDBC调用获得函数值????
  • SQL中含函数,比如COUNT(*),怎样在JDBC接口中取出函数值????
  • sql数据库不能直接用instr函数
  • T-SQL常用的聚合函数
  • sql server中自定义一个简单的 split 函数
  • 初学者问题:标准的sql里有处理日期的函数吗?
  • access与sql server几个常用函数的区别(图文)
  • 分享:sql server 取日期的年月日部分的函数
  • sql函数实现递归查询示例
  • T-SQL常用的数学函数
  • T-SQL实例 函数结果设置为列别名
  • SQL Server中的数据复制到的Access中的函数
  • C处理SQL命令字符串的函数哪里有?
  • SQL中函数 replace 的参数1的数据类型ntext无效的解决方法
  • SQL中有count这个函数,请问如何将这个值取出
  • 高分求java.sql类库的类说明,函数及方法!
  • php is_numberic函数产生sql注入漏洞怎么解决
  • sql函数CAST与CONVERT的区别
  • SQL的SUBSTR()函数使用介绍
  • sql2005 HashBytes 加密函数
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL Server统计SQL语句执行时间的脚本
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3