聚合函数

day 35

ぐ巨炮叔叔 提交于 2019-12-03 01:18:49
目录 单表操作 分组 group by having order by limit 使用顺序 多表操作 外键 一对多 多对多 一对一 多表联查 单表操作 分组 group by 分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组 用法 select 聚合函数, 选取的字段 from employee group by 分组的字 group by : 是分组的关键词 group by 必须和聚合函数(count)出现 where 条件语句和group by分组语句的先后顺序: where > group by > having(******) having having是对group by后的数据进行二次筛选 select 聚合函数 [as 列名] from 表名 group by 列名 having 条件; order by order by 列名 asc 升序 order by 列名 desc 降序 limit 限制查询记录的个数 limit offset,size offset 表示起始行数,第一行对应的offset是0 size表示查询记录的个数 使用顺序 where > group by > having > order by > limit 多表操作 外键 外键是表中的一个字段,这个字段与另外一个表中的字段相匹配 作用: 1

分析函数之开窗函数over

匿名 (未验证) 提交于 2019-12-03 00:40:02
一、分析函数 -- Oracle从8.1.6开始提供分析函数,专门用于解决复杂报表统计需求的功能强大的函数, -- 它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值。分析函数用于计算基于组的某种聚合值。 -- 它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。普通的聚合函数用group by分组, -- 每个分组返回一个统计值;而分析函数采用partition by分组,并且每组每行都可以返回一个统计值。 -- 1、分析函数的形式: -- 分析函数带有一个开窗函数over(),在窗口函数中包含三个分析子句:分组(partition by), 排序(order by), 窗口(rows) , -- 他们的使用形式如下:over(partition by xxx order by yyy rows between zzz)。 -- 注:窗口子句在这里我只说rows方式的窗口,range方式和滑动窗口也不提。 -- 例如:统计函数+over()、排序函数+over()、数据分布函数+over()、统计分析函数+over()。 -- 2、开窗函数: 开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能 /* 会随着行的变化而变化 */ 。例如over函数 二、窗口函数 -- 窗口函数中常用的子句有:分区

SQL 聚合查询

匿名 (未验证) 提交于 2019-12-03 00:29:01
如果我们要统计一张表的数据量,例如,想查询students表一共有多少条记录,难道必须用SELECT * FROM students查出来然后再数一数有多少行吗? 这个方法当然可以,但是比较弱智。对于统计总数、平均数这类计算,SQL提供了专门的聚合函数,使用聚合函数进行查询,就是聚合查询,它可以快速获得结果。 仍然以查询students表一共有多少条记录为例,我们可以使用SQL内置的COUNT()函数查询: SELECT COUNT (*) FROM students; COUNT( )表示查询所有列的行数,要注意聚合的计算结果虽然是一个数字,但查询的结果仍然是一个二维表,只是这个二维表只有一行一列,并且列名是COUNT( )。 通常,使用聚合查询时,我们应该给列名设置一个别名,便于处理结果: SELECT COUNT (*) num FROM students; 所有的UDAF(即聚合函数)都应该支持分组查询,内置的聚合函数有: sum (列名) 求和      max (列名) 最大值      min (列名) 最小值      avg (列名) 平均值      first (列名) 第一条记录 last (列名) 最后一条记录 count (列名) 统计记录数 注意和 count (*) 的区别 COUNT(*)和COUNT(id)实际上是一样的效果。另外注意

day 35 多表查询

百般思念 提交于 2019-12-03 00:04:25
昨日补充 用 name=''比name is null快 单表操作 分组 group by 分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等 用法: select 聚合函数,选取的字段 from 表名 group by 分组的字段; group by:是分组的关键词 group by 必须和聚合函数一起出现 聚合函数: max : 求最大的 min:求最小的 count: 计数,数量 sum:求和 avg:平均数 where 条件语句和group by分组语句的先后顺序: where>group by>having(************) 例子: #以性别为例,进行分组,统计男生和女生的人数 select count(id),sex from employee group by sex; #对部门进行分组,求出每个部门年龄最大的那个人; select max(age),depart_id from employee group by depart_id; # count和sum的区别: select depart_id,count(age) from employee group by depart_id; select depart_id,sum(age) from employee group by depart_id;

SqlServer PIVOT函数快速实现行转列,UNPIVOT实现列转行

匿名 (未验证) 提交于 2019-12-03 00:02:01
https://www.cnblogs.com/OpenCoder/p/6668882.html 我们在写Sql语句的时候没经常会遇到将查询结果行转列,列转行的需求,拼接sql字符串,然后使用sp_executesql执行sql字符串是比较常规的一种做法。但是这样做实现起来非常复杂,而在SqlServer2005中我们有了PIVOT/UNPIVOT函数可以快速实现行转列和列转行的操作。 PIVOT函数,行转列 PIVOT函数的格式如下 PIVOT(<聚合函数>([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后的列名N])) <聚合函数>就是我们使用的SUM,COUNT,AVG等Sql聚合函数,也就是行转列后计算列的聚合方式。 [聚合列值]要进行聚合的列名 [行转列前的列名]这个就是需要将行转换为列的列名。 [行转列后的列名]这里需要声明将行的值转换为列后的列名,因为转换后的列名其实就是转换前行的值,所以上面格式中的[行转列后的列名1],[行转列后的列名2],[行转列后的列名3],......[行转列后的列名N]其实就是[行转列前的列名]每一行的值。 下面我们来看一个例子有一张表名为[ShoppingCart]有三列[Week],[TotalPrice],[GroupId]

SparkSQL自定义无类型聚合函数

匿名 (未验证) 提交于 2019-12-02 23:57:01
准备数据: Michael , 3000 Andy , 4500 Justin , 3500 Betral , 4000 一、定义自定义无类型聚合函数 想要自定义无类型聚合函数,那必须得继承org.spark.sql.expressions.UserDefinedAggregateFunction,然后重写父类得抽象变量和成员方法。 package com . cjs import org . apache . spark . sql . Row import org . apache . spark . sql . expressions .{ MutableAggregationBuffer , UserDefinedAggregateFunction } import org . apache . spark . sql . types . _ object UDFMyAverage extends UserDefinedAggregateFunction { //定义输入参数的数据类型 override def inputSchema : StructType = StructType ( StructField ( "inputColumn" , LongType ):: Nil ) //定义缓冲器的数据结构类型,缓冲器用于计算,这里定义了两个数据变量:sum和count

sql查询 ――聚合函数

匿名 (未验证) 提交于 2019-12-02 23:51:01
1 --聚合函数 2 -- sum() 3 -- 求和 4 select sum(age) from student; 5 6 -- count() 7 -- 求数量 8 -- 数据量 9 select count(*) as '数量' from student; 10 11 -- max() 12 --最大值 13 select max(age) as '最大值' from student; 14 15 -- min 16 -- 最小值 17 select min(age) as '最小值' from student; 18 19 -- avg() 20 --求平均值 21 select avg(age) as '平均值' from student; 22 23 --round() 24 --保留几位小数 25 select round(avg(age),2) as '平均值2位小数' from student; 26 27 -- 综合查询 28 select sum(age)/count(age) as '平均值' from student;

Spark学习之路(十一)―― Spark SQL 聚合函数 Aggregations

匿名 (未验证) 提交于 2019-12-02 23:38:02
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37809146/article/details/91282135 一、简单聚合 1.1 数据准备 // 需要导入spark sql内置的函数包 import org.apache.spark.sql.functions._ val spark = SparkSession.builder().appName("aggregations").master("local[2]").getOrCreate() val empDF = spark.read.json("/usr/file/json/emp.json") // 注册为临时视图,用于后面演示SQL查询 empDF.createOrReplaceTempView("emp") empDF.show() 注:emp.json可以从本仓库的 resources 目录下载。 1.2 count // 计算员工人数 empDF.select(count("ename")).show() 1.3 countDistinct // 计算姓名不重复的员工人数 empDF.select(countDistinct("deptno")).show() 1.4 approx_count_distinct 通常在使用大型数据集时

group by与having的用法

左心房为你撑大大i 提交于 2019-12-02 23:27:59
  group by,即以其中一个字段的值来分组 select 的字段只能是分组的字段类别以及使l聚合函数如,max(),min(),count()的字段。 where在前,group by在后,注意group by紧跟在where最后一个限制条件后面,不能被夹在where限制条件之间。 where在前,group by在后的原因:要先用where过滤掉不进行分组的数据,然后在对剩下满足条件的数据进行分组。 having是在分好组后找出特定的分组,通常是以筛选聚合函数的结果,如sum(a) > 100等,且having必须在group by 后面, 使用了having必须使用group by,但是使用group by 不一定使用having。不允许使用双重聚合函数,所以在对分组进行筛选的时候 可以用order by 排序,然后用limit也可以找到极值。 如下图所示,使用having报错,通过order by 筛选 鸣谢参考: https://www.cnblogs.com/jingfengling/p/5962182.html 来源: https://www.cnblogs.com/max1995/p/11766987.html

八、分组查询详解(group by & having)

强颜欢笑 提交于 2019-12-02 18:23:46
本篇内容 分组查询语法 聚合函数 单字段分组 多字段分组 分组前筛选数据 分组后筛选数据 where和having的区别 分组后排序 where & group by & having & order by & limit 一起协作 mysql分组中的坑 in多列查询的使用 一、分组查询      语法:   SELECT column, group_function,... FROM table  [WHERE condition]  GROUP BY group_by_expression  [HAVING group_condition];  说明:         group_function:聚合函数。     group_by_expression:分组表达式,多个之间用逗号隔开。     group_condition:分组之后对数据进行过滤。     分组中,select后面只能有两种类型的列: 出现在group by后的列 或者使用聚合函数的列 二、聚合函数 函数名称 作用 max 查询指定列的最大值 min 查询指定列的最小值 count 统计查询结果的行数 sum 求和,返回指定列的总和 avg 求平均值,返回指定列数据的平均值   分组时,可以使用使用上面的聚合函数。 三、单字段分组   SELECT user_id 用户id, COUNT(id) 下单数量