SQL分组查询及聚集函数的使用
今天要做一个查询统计功能,一开始有点犯难,上午尝试大半天才写出统计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 条件显示特定的组,也可以使用多个分组标准进行分组。
2、CONVERT (<data_ type>[ length ], <expression> [, style])
1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。
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)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示"+",以标识发生了这种截断。
SQL分组查询及聚集函数的使用的更多相关文章
- Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题? 解决方案一,按照Object[]数据取出数据,然后自己组bean 解决方 ...
- MySQL全面瓦解10:分组查询和聚合函数
概述 相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位):或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估). ...
- SQL分组查询group by
注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里. 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group ...
- SQL分组查询GroupBy
一.分组查询1.使用group by进行分组查询在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:〉被分组的列〉为每个分组返回一个值得表达式 ...
- MySQL-快速入门(5)数据查询-常用关键字、分组查询、聚合函数
1.in关键字.in的效率高于or. in (value1,value2,...) 或者not in (value1,value2,...) 2.between ... and ... between ...
- SQL——连接查询、聚合函数、开窗函数、分组功能、联合查询、子查询
连接查询 inner join,用的最多,表示多张表一一对应 聚合函数 操作行数据,进行合并 sum.avg.count.max.min 开窗函数 将合并的数据分布到原表的每一行,相当于多出来了一列, ...
- 复杂sql分组查询 ( pivot)
一个数据表里面字段有年.月.日.金额.支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行, 最后在增加一列小计当前的所有支付方式的金额.如下图: 原sql ...
- SQL中子查询为聚合函数时的优化
测试数据:create table test1 as select * from dba_objects where rownum<=10000;--10000条记录create table t ...
- SQL分组查询
把数据分成多个逻辑组,以便能对每个组的数据进行操作,对每个组进行聚集计算. 1.创建分组 分组是在SELECT语句的GROUP BY子句中建立的 例子: SELECT vendId ...
随机推荐
- python3之环境搭建以及基础语法
早些时候,有一段时间吧,为了想免费下载网易云的收费音乐,也是翻了下python的教程的,语法方面没细致地去看,跟java.php.javascript这些都大同小异,也是面向对象的.那么,近期准备快速 ...
- 2PC
两阶段提交()Two-Phase Commit):是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法.通常,二阶段提交协议 ...
- Weinre(pc调试手机页面)
Weinre是一款基于Web Inspector(Webkit)的远程调试工具,借助于网络,可以在PC上直接调试运行在移动设备上的远程页面,中文意思是远程Web检查器,有了Weinre,在P ...
- python3 使用matplotlib画图问题
保存图片的问题 在画子图并保存图片的时候,用如下代码保存的图片总是不能显示,但是在运行的过程中能够正常显示图片. # coding:utf-8 from pylab import * # 创建子图 f ...
- 【ACM非算法部分】综合篇
从零开始系列,也为了更好的补缺补漏. ===================== 目录: scanf()函数 STL汇总 读入优化 =====================
- 《DSP using MATLAB》示例Example 8.30
%% ------------------------------------------------------------------------ %% Output Info about thi ...
- C#-StructLayoutAttribute(结构体布局)
struct实例字段的内存布局(Layout)和大小(Size) 在C/C++中,struct类型中的成员的一旦声明,则实例中成员在内存中的布局(Layout)顺序就定下来了,即与成员声明的顺序相同, ...
- 从hello world 说程序运行机制
转自:http://www.cnblogs.com/yanlingyin/archive/2012/03/05/2379199.html 开篇 学习任何一门编程语言,都会从hello world 开始 ...
- HAL层编写规范
andriod HAL模块也有一个通用的入口地址,这个入口地址就是HAL_MODULE_INFO_SYM变量,通过它,我们可以访问到HAL模块中的所有想要外部访问到的方法. 在Linux系统中,后缀 ...
- ambassador kubernetes native api gateway
github 上的介绍: Ambassador is an open source Kubernetes-native API Gateway built on Envoy, designed for ...