1. excel中数据库函数的具体用法并举例
if函数可以嵌套七层,我简单举统计成绩中用到的一种写法:
if(a1>=90,"优秀",if(a1>=60,"及格","不及格")
其中a1要看你要分析的单元格的地址,这里只是举例罢了,实际应用还要看你的需要,分析完以后可以用填充柄填充下面的单元格,公式会自动在大于或等于90分的旁边写上优秀两字,在大于等于60分小于90分旁边的单无格写上及格,低于60分的写上不及格.
如果你是用插入函数的话,选择if会出现三个格.
第一格填入:a1>=90
第二格填入:优秀
第三格填入:if(a1>=60,"及格","不及格")
希望这个对你的考试有所帮助.
1.IF函数的语法结构
IF函数的语法结构:IF(条件,结果1,结果2),详细说明可以参照表6-4。
2.IF函数的功能
对满足条件的数据进行处理,条件满足则输出结果1,不满足则输出结果2。可以省略结果1或结果2,但不能同时省略。
3.条件表达式
把两个表达式用关系运算符(主要有=,<>,>,<,>=,<=等6个关系运算符)连接起来就构成条件表达式,例如,在IF(a1+b1+50
<>
b1+c1
50,
1,1)函数式中,条件表达式是a1+b1+50
<>
b1+c1
50。
4.执行过程
下面以IF(a1+b1+50
<>
b1+c1
50,
1,1)函数式为例来说明IF函数的执行过程。
先计算条件表达式a1+b1+50
<>
b1+c1
50,如果表达式成立,值为TRUE,并在函数所在单元格中显示“
1”;如果表达式不成立,值为FALSE,并在函数所在单元格中显示“1”。
5.IF函数嵌套的执行过程
如果按等级来判断某个变量,IF函数的格式如下:
IF(E2>=85,"优",IF(E2>=75,"良",IF(E2>=60,"及格","不及格")))
函数从左向右执行。首先计算E2>=85,如果该表达式成立,则显示“优”,如果不成立就继续计算E2>=75,如果该表达式成立,则显示“良”,否则继续计算E2>=60,如果该表达式成立,则显示“及格”,否则显示“不及格”。
参考资料:
http://www.huianren.net/bbs/simple/index.php?t65843.html
回答者:mysky4u
-
魔法师
四级
6-4
23:28
这个函数是用来判断的。比如:A列单元格数据是姓名,B列是性别,C列是基本工资。现要求给所有人员增加工资,男增加80,女增加50,把新增工资结果放入D列对应的单元格。
操作过程:在D1单元格输入=if(B1="男",C1+80,C1+50)
就可以了,下面有再多的数据,就从D1用填充手柄向下填充。
说明:这个函数有三个参数,第一个是逻辑条件,第二个是当值为“真”时的返回值,第三个是当值这“假”的返回值。上例中,对B1单元格进行判断,如果值是“男”(注意,汉字必须用引号,而且是半角),那么就在原工资C1的基础上增加80,如果不是男性,就增加50。
明白了吗?另外,if函数还可以套用,就是在IF里面用IF。
2. sql里的ROW_NUMBER() OVER是啥意思
ROW_NUMBER() OVER是oracle数据库的分析函数,会在数据表生成一个排序列。
语法:ROW_NUMBER ( ) OVER( [ PARTITION BY value_expression , ... [ n ] ]order_by_clause )
参数:PARTITION BYvalue_expression 将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。value_expression 指定对结果集进行分区所依据的列。如果未指定 PARTITION BY,则此函数将查询结果集的 所有行视为单个组。
order_by_clause ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。
(2)数据库分析函数扩展阅读
分析函数与聚合函数计算方式一样,分析函数也是对行集组进行聚合计算,但是它不像普通聚合仗函数那样每组只返回一个值,分析函数可以为每组返回多个值。
分析函数的语法为:over(partition by排 列名1 order by 列名2 ),括号中的两个关键词partition by 和order by 可以只出现一个。over() 前面是一个函数,如果是聚合函数,那么order by 不能一起使用。
ROW_NUMBER、DENSE_RANK、RANK属于排名函数。
排名分析函数可以单独使用ORDER BY 语句,也可以和PARTITION BY同时使用。
PARTITION BY用于将结果集进行分组。
ORDER BY 指定排名分析函数的顺序,在排名分析函数中必须使用ORDER BY语句。
ROW_NUMBER 为每一组的行按顺序生成一个连续序号。
RANK()也为每一组的行生成一个序号,与ROW_NUMBER()不同的是如果按照ORDER BY的排序,如果有相同的值会生成相同的序号,并且接下来的序号是不连序的。例如两个相同的行生成序号3,那么接下来会生成序号5。
3. excel中的数据库函数
用于对存储在数据清单或数据库中的数据进行分析的一些工作表函数,这些函数统称为Excel的数据库函数。
Excel数据库函数主要应用于数据的统计与分析,使用比较多的比如:SUM,LOOKUP,VLOOKUP,PRODUCT等,在制作报表时根据逻辑来使用这些函数能够很大的提升制作效率
4. excel中数据库函数是干什么的
用于对存储在数据清单或数据库中的数据进行分析的一些工作表函数,这些函数统称为Excel的数据库函数。
Excel数据库函数主要应用于数据的统计与分析,使用比较多的比如:SUM,LOOKUP,VLOOKUP,PRODUCT等,在制作报表时根据逻辑来使用这些函数能够很大的提升制作效率。
5. sem数据分析中常用的函数有哪些
常用函数公式:
1、LEN函数:用于统计一个数据或者一个词出现的次数
使用公式:=LEN(数据),需要进行统计的关键词,主要作用就是计算关键词出现的次数
2、countif函数:统计一个区域的数据中符合一个条件的总数量
使用公式:=countif(区域,条件) 需要注意符号是英文状态,除了字母,都要加一下双引号。
3、vlookup函数:纵向查找
使用公式:=vlookup(G:G,A:B,2) G:G相同的一列,A:B查找范围,2是查找的第几列
如果没有相同值,可以自己创造一个相同值。
4、sumif函数:条件求和
使用公式:=sumif(C:C,”>20”,B:B)
C列条件大于20,b列的和,注意符号使用英文状态下,除了字母都要添加双引号
5、sumifs函数:多条件求和
使用公式:=sumifs(B:B,C:C,”>80”,D:D,”>80”)
注意先写要求和的区域,再写条件
常用的sem数据分析函数,各位小伙伴们学会了吗?可以多多操作,牢牢记住公式,让自己的工作更加轻松,事半功倍。
6. 所有的数据库函数的函数名都以什么开头
这个是好多的具体如下:
一、财务函数
ACCRINT 返回定期付息有价证券的应计利息
ACCRINTM 返回到期一次性付息有价证券的应计利息
AMORDEGRC 返回使用折旧系数的每个结算期间的折旧值
AMORLINC 返回每个结算期间的折旧值
COUPDAYBS 返回当前付息期内截止到成交日的天数
COUPDAYS 返回包含成交日所在的付息期的天数
COUPDAYSNC 返回从成交日到下一付息日之间的天数
COUPNCD 返回成交日之后的下一个付息日
COUPNUM 返回成交日和到期日之间的付息次数
COUPPCD 返回成交日之前的前一个的付息日
CUMIPMT 返回两个期间内累计支付的利息
CUMPRINC 返回一笔贷款在两个期间内累计偿还的本金数额
DB 使用固定余额递减法,返回一笔资产在给定期间内的折旧值
DDB 使用双倍余额递减法或其他指定方法,返回一笔资产在给定期间内的折旧值
DISC 返回有价证券的贴现率
DOLLARDE 将按分数表示的价格转换为按小数表示的价格
DOLLARFR 将按小数表示的价格转换为按分数表示的价格
DURATION 返回定期付息有价证券的每年期限
EFFECT 返回实际年利率
FV 返回一笔投资的未来值
FVSCHEDULE 返回应用一系列复利率后的本金的未来值
INTRATE 返回一次性付息有价证券的利率
IPMT 返回一笔投资在给定期间内支付的利息
IRR 返回一系列现金流的内部收益率
ISPMT 计算特定投资期内要支付的利息
MDURATION 返回假设面值 $100 的有价证券的 Macauley 修正期限
MIRR 返回正和负现金流以不同利率进行计算的内部收益率
NOMINAL 返回年名义利率
NPER 返回投资期间的数量
NPV 返回基于一系列定期现金流和贴现率计算的投资的现净值
ODDFPRICE 返回首期付息日不固定的面值$100 的有价证券价格
ODDFYIELD 返回首期付息日不固定的有价证券的收益率
ODDLPRICE 返回末期付息日不固定的面值$100 的有价证券价格
ODDLYIELD 返回末期付息日不固定的有价证券的收益率
PMT 返回年金的定期支付金额
PPMT 返回一笔投资在给定期间内偿还的本金
PRICE 返回定期付息的面值 $100 的有价证券的价格
PRICEDISC 返回折价发行的面值$100 的有价证券的价格
PRICEMAT 返回到期付息的面值$100 的有价证券的价格
PV 返回投资的现值
RATE 返回年金的各期利率
RECEIVED 返回一次性付息的有价证券到期收回的金额
SLN 返回一笔资产在某个期间内的线性折旧值
SYD 返回一笔资产按年限总和折旧法计算的指定期间的折旧值
TBILLEQ 返回国库券的等效收益率
TBILLPRICE 返回面值 $100 的国库券的价格
TBILLYIELD 返回国库券的收益率
VDB 使用余额递减法,返回一笔资产在给定期间或部分期间内的折旧值
XIRR 返回一组不定期发生的现金流的内部收益率
XNPV 返回一组不定期发生的现金流的净现值
YIELD 返回定期付息有价证券的收益率
YIELDDISC 返回折价发行的有价证券(如国库券)的年收益率
YIELDMAT 返回到期付息的有价证券的年收益率
二、日期与时间函数
DATE 返回特定日期的序列号
DATEVALUE 将文本格式的日期转换为序列号
DAY 将序列号转换为月的日期
DAYS360 计算基于一年 360 天的两个日期间的天数
EDATE 返回用于表示开始日期之前或之后月数的日期的序列号
EOMONTH 返回指定个数月之前或之后的月的末日的序列号
HOUR 将序列号转换为小时
MINUTE 将序列号转换为分钟
MONTH 将序列号转换为月
NETWORKDAYS 返回两个日期之间的所有工作日个数
NOW 返回当前日期和时间的序列号
SECOND 将序列号转换为秒
TIME 返回特定时间的序列号
TIMEVALUE 将文本格式的时间转换为序列号
TODAY 返回今天日期的序列号
WEEKDAY 将序列号转换为一星期的某天
WEEKNUM 将序列号转换为代表该星期为一年中的第几周的数字
WORKDAY 返回指定个数工作日之前或之后日期的序列号
YEAR 将序列号转换为年
YEARFRAC 返回代表start_date 和 end_date 之间的天数的年分数
三、数学和三角函数
ABS 返回数字的绝对值
ACOS 返回数字的反余弦值
ACOSH 返回数字的反双曲余弦值
ASIN 返回数字的反正弦值
ASINH 返回数字的反双曲正弦值
ATAN 返回数字的反正切值
ATAN2 返回 X 和 Y 坐标的反正切值
ATANH 返回数字的反双曲正切值
CEILING 将数字舍入为最接近的整数或最接近的 Significance 的倍数
COMBIN 返回给定数目对象的组合数
COS 返回数字的余弦
COSH 返回数字的双曲余弦值
DEGREES 将弧度转换为度
EVEN 将数字向上舍入为最接近的偶数
EXP 返回 e 的给定数字次幂
FACT 返回数字的阶乘
FACTDOUBLE 返回数字的双倍阶乘
FLOOR 向绝对值减小的方向舍入数字
GCD 返回最大公约数
INT 将数字向下舍入到最接近的整数
LCM 返回最小公倍数
LN 返回数字的自然对数
LOG 按所指定的底数,返回数字的对数
LOG10 返回数字的以 10 为底的对数
MDETERM 返回数组的矩阵行列式的值
MINVERSE 返回数组的逆矩阵
MMULT 返回两个数组的矩阵乘积
MOD 返回除法的余数
MROUND 返回舍入到指定倍数的数值
MULTINOMIAL 返回一组数字的多项式
ODD 将数字向上舍入为最接近的奇数
PI 返回 pi 的值
POWER 返回给定数字次幂的结果
PRODUCT 将其参数相乘
QUOTIENT 返回除法的整数部分
RADIANS 将角度转换为弧度
RAND 返回 0 和 1 之间的一个随机数
RANDBETWEEN 返回指定数字间的随机数
ROMAN 将阿拉伯数字转换为文本形式的罗马数字
ROUND 将数字按指定位数舍入
ROUNDDOWN 向绝对值减小的方向舍入数字
ROUNDUP 向绝对值增大的方向舍入数字
SERIESSUM 返回基于以下公式的幂级数之和
SIGN 返回数字的符号
SIN 返回给定角度的正弦值
SINH 返回数字的双曲正弦值
SQRT 返回正平方根
SQRTPI 返回某数与 pi 的乘积的平方根
SUBTOTAL 返回列表或数据库中的分类汇总
SUM 将其参数相加
SUMIF 按给定条件对若干单元格求和
SUMPRODUCT 返回对应的数组元素的乘积和
SUMSQ 返回参数的平方和
SUMX2MY2 返回两个数组中对应值的平方差之和
SUMX2PY2 返回两个数组中对应值的平方和之和
SUMXMY2 返回两数组中对应值的平方差的之和
TAN 返回数字的正切
TANH 返回数字的双曲正切值
TRUNC 将数字截尾取整
四、统计函数
AVEDEV 返回数据点与它们的平均值的绝对偏差平均值
AVERAGE 返回其参数的平均值
AVERAGEA 返回其参数的平均值,包括数字、文本和逻辑值
BETADIST 返回 Beta 累积分布函数
BETAINV 返回指定 Beta 分布的累积分布函数的反函数
BINOMDIST 返回一元二项式分布的概率值
CHIDIST 返回γ2 分布的单尾概率
CHIINV 返回γ2 分布的单尾概率的反函数
CHITEST 返回独立性检验值
CONFIDENCE 返回总体平均值的置信区间
CORREL 返回两个数据集之间的相关系数
COUNT 计算参数列表中的数字个数
COUNTA 计算参数列表中的数值个数
COUNTBLANK 计算区间内的空白单元格个数
COUNTIF 计算满足给定条件的区间内的非空单元格个数
COVAR 返回协方差,成对偏差乘积的平均值
CRITBINOM 返回使累积二项式分布小于或等于临界值的最小值
DEVSQ 返回偏差的平方和
EXPONDIST 返回指数分布
FDIST 返回 F 概率分布
FINV 返回 F 概率分布的反函数值
FISHER 返回 Fisher 变换
FISHERINV 返回 Fisher 变换的反函数值
FORECAST 返回沿线性趋势的值
FREQUENCY 以垂直数组的形式返回频率分布
FTEST 返回 F 检验的结果
GAMMADIST 返回伽玛分布
GAMMAINV 返回伽玛累积分布函数的反函数
GAMMALN 返回伽玛函数的自然对数,Γ(x)
GEOMEAN 返回几何平均值
GROWTH 返回沿指数趋势的值
HARMEAN 返回调和平均值
HYPGEOMDIST 返回超几何分布
INTERCEPT 返回线性回归线的截距
KURT 返回数据集的峰值
LARGE 返回数据集中第 k 个最大值
LINEST 返回线性趋势的参数
LOGEST 返回指数趋势的参数
LOGINV 返回对数分布函数的反函数
LOGNORMDIST 返回对数累积分布函数
MAX 返回参数列表中的最大值
MAXA 返回参数列表中的最大值,包括数字、文本和逻辑值
MEDIAN 返回给定数值集合的中值
MIN 返回参数列表中的最小值
MINA 返回参数列表中的最小值,包括数字、文本和逻辑值
MODE 返回在数据集中出现次数最多的值
NEGBINOMDIST 返回负二项式分布
NORMDIST 返回正态累积分布
NORMINV 返回正态累积分布的反函数
NORMSDIST 返回标准正态累积分布
NORMSINV 返回标准正态累积分布的反函数
PEARSON 返回 Pearson 乘积矩相关系数
PERCENTILE 返回区域中数值的第 K 个百分点的值
PERCENTRANK 返回数据集中的值的百分比排位
PERMUT 返回给定数目对象的排列数量
POISSON 返回泊松分布
PROB 返回区域中的数值落在指定区间内的概率
QUARTILE 返回数据集的四分位数
RANK 返回一列数字的数字排位
RSQ 返回 Pearson 乘积矩相关系数的平方
SKEW 返回分布的偏斜度
SLOPE 返回线性回归线的斜率
SMALL 返回数据集中第 K 个最小值
STANDARDIZE 返回正态化数值
STDEV 估算基于给定样本的标准偏差
STDEVA 估算基于给定样本(包括数字、文本和逻辑值)的标准偏差
STDEVP 计算基于给定的样本总体的标准偏差
STDEVPA 计算基于总体(包括数字、文本和逻辑值)的标准偏差
STEYX 返回通过线性回归法计算每个 x 的 y 预测值时所产生的标准误差
TDIST 返回学生的 t 分布
TINV 返回学生的 t 分布的反函数
TREND 返回沿线性趋势的值
TRIMMEAN 返回数据集的内部平均值
TTEST 返回与学生的 t 检验相关的概率
VAR 估算基于样本的方差
VARA 估算基于样本(包括数字、文本和逻辑值)的方差
VARP 计算基于样本总体的方差
VARPA 计算基于样本总体(包括数字、文本和逻辑值)的方差
WEIBULL 返回韦伯分布
ZTEST 返回 z 检验的单尾概率值
五、查找和引用函数
ADDRESS 以文本形式将引用值返回工作表的单个单元格
AREAS 返回引用值中包含的区域个数
CHOOSE 从一列值中选择值
COLUMN 返回引用的列个数
COLUMNS 返回引用中包含的列个数
HLOOKUP 查找数组的首行,并返回特定单元格的值
HYPERLINK 创建一个快捷方式或跳转,用以打开存储在网络服务器、Intranet 或 Internet 中的文件
INDEX 使用索引从引用或数组选择值
INDIRECT 返回由文本值指定的引用
LOOKUP 在向量或数组中查找值
MATCH 在引用值或数组中查找值
OFFSET 从给定引用值返回引用偏移量
ROW 返回引用的行个数
ROWS 返回引用中包含的行个数
RTD 从支持 COM 自动化(自动化:从其他应用程序或开发工具使用应用程序的对象的方法。以前称为“OLE 自动化”,自动化是一种工业标准和组件对象模型 (COM) 功能。)的程序中返回实时数据
TRANSPOSE 返回数组的转置
VLOOKUP 查找数组首列,移动到行并返回单元格的值
六、数据库工作表函数
Microsoft Excel 中包含了一些工作表函数,用于对存储在列表或数据库中的数据进行分析,这些函数统称为 Dfunctions,每个函数均有三个参数:database、field 和 criteria。这些参数指向函数所使用的工作表区域。
DAVERAGE 返回选择的数据库条目的平均值
DCOUNT 计算数据库中包含数字的单元格个数
DCOUNTA 计算数据库中的非空单元格
DGET 从数据库提取符合指定条件的单个记录
DMAX 返回选择的数据库条目的最大值
DMIN 返回选择的数据库条目的最小值
DPRODUCT 将数据库中符合条件的记录的特定字段中的值相乘
DSTDEV 基于选择的数据库条目的样本估算标准偏差
DSTDEVP 基于选择的数据库条目的总体计算标准偏差
DSUM 将数据库中符合条件的记录的字段列中的数字相加
DVAR 基于选择的数据库条目的样本估算方差
DVARP 基于选择的数据库条目的样本总体计算方差
GETPIVOTDATA 返回存储在数据透视表中的数据
七、文本和数据函数
ASC 将字符串中的全角(双字节)英文字母或片假名更改为半角(单字节)字符
BAHTTEXT 使用 ß(泰铢)货币格式将数字转换成文本
CHAR 返回代码数字所对应的字符
CLEAN 删除文本中不可打印的字符
CODE 返回文本字符串中第一个字符的数字代码
CONCATENATE 将几个文本项合并为一个文本项
DOLLAR 使用 $(美元)货币格式将数字转换成文本
EXACT 检查两个文本值是否相同
FIND 在一个文本值中查找另一个文本值(区分大小写)
FIXED 将数字格式设置为具有固定小数位数
JIS 将字符串中的半角(单字节)英文字母或片假名更改为全角(双字节)字符
LEFT 返回文本值中最左边的字符
LEN 返回文本字符串中的字符个数
LOWER 将文本转换为小写
MID 在文本字符串中,从您所指定的位置开始返回指定数量的字符
PHONETIC 提取文本字符串中的拼音(furigana) 字符
PROPER 将文本值的每个字的首字母大写
REPLACE 替换文本中的字符
REPT 按照给定的次数重复显示文本
RIGHT 返回文本值中最右边的字符
SEARCH 在一个文本值中查找另一个文本值(不区分大小写)
SUBSTITUTE 在文本字符串中用新文本替换旧文本
T 将其参数转换为文本
TEXT 设置数字格式并将其转换为文本
TRIM 从文本删除空格
UPPER 将文本转换成大写形式
VALUE 将文本参数转换为数字
八、逻辑运算符
AND 如果其所有参数为 TRUE,则返回 TRUE
FALSE 返回逻辑值 FALSE
IF 指定要执行的逻辑检验
NOT 对其参数的逻辑求反
OR 如果所有参数为 TRUE,则返回 TRUE
TRUE 返回逻辑值 TRUE
九、信息函数
CELL 返回单元格的格式、位置或内容等信息
ERROR.TYPE 返回相应错误类型的个数
INFO 返回有关当前操作环境的信息
ISBLANK 如果值为空,则返回 TRUE
ISERR 如果值为除 #N/A 以外的任何错误值,则返回TRUE
ISERROR 如果值为任何错误值,则返回 TRUE
ISEVEN 如果数字为偶数,则返回 TRUE
ISLOGICAL 如果值为逻辑值,则返回TRUE
ISNA 如果值为 #N/A 错误值,则返回 TRUE
ISNONTEXT 如果值不为文本,则返回TRUE
ISNUMBER 如果值为数字,则返回TRUE
ISODD 如果数字为奇数,则返回 TRUE
ISREF 如果值为引用值,则返回 TRUE
ISTEXT 如果值为文本,则返回 TRUE
N 返回转换为数字的值
NA 返回错误值 #N/A
TYPE 返回表示值的数据类型的数字
十、工程函数
BESSELI 返回已修改的 Bessel 函数 In(x)
BESSELJ 返回 Bessel 函数 Jn(x)
BESSELK 返回已修改的 Bessel 函数 Kn(x)
BESSELY 返回 Bessel 函数 Yn(x)
BIN2DEC 将二进制数转换为十进制数
BIN2HEX 将二进制数转换为十六进制数
BIN2OCT 将二进制数转换为八进制数
COMPLEX 将实系数和虚系数转换为复数
CONVERT 将数字从一个度量系统转换为另一个度量系统
DEC2BIN 将十进制数转换为二进制数
DEC2HEX 将十进制数转换为十六进制数
DEC2OCT 将十进制数转换为八进制数
DELTA 检验是否两个值相等
ERF 返回错误函数
ERFC 返回互补错误函数
GESTEP 检验数字是否大于阈值
HEX2BIN 将十六进制数转换为二进制数
HEX2DEC 将十六进制数转换为十进制数
HEX2OCT 将十六进制数转换为八进制数
IMABS 返回复数的的绝对值(模数)
IMAGINARY 返回复数的虚系数
IMARGUMENT 返回参数 theta,即以弧度表示的角
IMCONJUGATE 返回复数的共轭复数
IMCOS 返回复数的余弦
IMDIV 返回两个复数的商
IMEXP 返回复数的指数
IMLN 返回复数的自然对数
IMLOG10 返回复数的以 10 为底的对数
IMLOG2 返回复数的以 2 为底的对数
IMPOWER 返回整数次幂的复数
IMPRODUCT 返回两个复数的积
IMREAL 返回复数的实系数
IMSIN 返回复数的正弦
IMSQRT 返回复数的平方根
IMSUB 返回两个复数的差
IMSUM 返回多个复数的和
OCT2BIN 将八进制数转换为二进制数
OCT2DEC 将八进制数转换为十进制数
OCT2HEX 将八进制数转换为十六进制数
7. 能说一下oracle中的开窗函数 聚合函数 分析函数都是什么吗
我也是用oracle数据库的,在实际开发中用到开窗函数和分析函数的机会还是很少的,用聚合函数的时候非常多,请LZ多关注聚合函数,下面是我上各大网站收集的,希望对楼主有所帮助。
分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是
对于每个组返回多行,而聚合函数对于每个组只返回一行。
下面通过几个例子来说明其应用。
1:统计某商店的营业额。
date sale
1 20
2 15
3 14
4 18
5 30
规则:按天统计:每天都统计前面几天的总额
得到的结果:
DATE SALE SUM
----- -------- ------
1 20 20 --1天
2 15 35 --1天+2天
3 14 49 --1天+2天+3天
4 18 67 .
5 30 97 .
2:统计各班成绩第一名的同学信息
NAME CLASS S
----- ----- ----------------------
fda 1 80
ffd 1 78
dss 1 95
cfe 2 74
gds 2 92
gf 3 99
ddd 3 99
adf 3 45
asdf 3 55
3dd 3 78
通过:
--
select * from
(
select name,class,s,rank()over(partition by class order by s desc) mm from t2
)
where mm=1
--
得到结果:
NAME CLASS S MM
----- ----- ---------------------- ----------------------
dss 1 95 1
gds 2 92 1
gf 3 99 1
ddd 3 99 1
注意:
1.在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果
2.rank()和dense_rank()的区别是:
--rank()是跳跃排序,有两个第二名时接下来就是第四名
--dense_rank()l是连续排序,有两个第二名时仍然跟着第三名
3.分类统计 (并显示信息)
A B C
-- -- ----------------------
m a 2
n a 3
m a 2
n b 2
n b 1
x b 3
x b 2
x b 4
h b 3
select a,c,sum(c)over(partition by a) from t2
得到结果:
A B C SUM(C)OVER(PARTITIONBYA)
-- -- ------- ------------------------
h b 3 3
m a 2 4
m a 2 4
n a 3 6
n b 2 6
n b 1 6
x b 3 9
x b 2 9
x b 4 9
如果用sum,group by 则只能得到
A SUM(C)
-- ----------------------
h 3
m 4
n 6
x 9
无法得到B列值
=====
select * from test
数据:
A B C
1 1 1
1 2 2
1 3 3
2 2 5
3 4 6
---将B栏位值相同的对应的C 栏位值加总
select a,b,c, SUM(C) OVER (PARTITION BY B) C_Sum
from test
A B C C_SUM
1 1 1 1
1 2 2 7
2 2 5 7
1 3 3 3
3 4 6 6
---如果不需要已某个栏位的值分割,那就要用 null
eg: 就是将C的栏位值summary 放在每行后面
select a,b,c, SUM(C) OVER (PARTITION BY null) C_Sum
from test
A B C C_SUM
1 1 1 17
1 2 2 17
1 3 3 17
2 2 5 17
3 4 6 17
求个人工资占部门工资的百分比
SQL> select * from salary;
NAME DEPT SAL
---------- ---- -----
a 10 2000
b 10 3000
c 10 5000
d 20 4000
SQL> select name,dept,sal,sal*100/sum(sal) over(partition by dept) percent from salary;
NAME DEPT SAL PERCENT
---------- ---- ----- ----------
a 10 2000 20
b 10 3000 30
c 10 5000 50
d 20 4000 100
二:开窗函数
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
1:
over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
over(partition by deptno)按照部门分区
2:
over(order by salary range between 5 preceding and 5 following)
每行对应的数据窗口是之前行幅度值不超过5,之后行幅度值不超过5
例如:对于以下列
aa
1
2
2
2
3
4
5
6
7
9
sum(aa)over(order by aa range between 2 preceding and 2 following)
得出的结果是
AA SUM
---------------------- -------------------------------------------------------
1 10
2 14
2 14
2 14
3 18
4 18
5 22
6 18
7 22
9 9
就是说,对于aa=5的一行,sum为 5-1<=aa<=5+2 的和
对于aa=2来说,sum=1+2+2+2+3+4=14 ;
又如 对于aa=9 ,9-1<=aa<=9+2 只有9一个数,所以sum=9 ;
3:其它:
over(order by salary rows between 2 preceding and 4 following)
每行对应的数据窗口是之前2行,之后4行
4:下面三条语句等效:
over(order by salary rows between unbounded preceding and unbounded following)
每行对应的数据窗口是从第一行到最后一行,等效:
over(order by salary range between unbounded preceding and unbounded following)
等效
over(partition by null)
other(
数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
一、 over函数
over函数指定了分析函数工作的数据窗口的大小,这个数据窗口大小可能会随着行的变化而变化,例如:
over(order by salary)按照salary排序进行累计,order by是个默认的开窗函数
over(partition by deptno) 按照部门分区
over(order by salary range between 50 preceding and 150 following)每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150的数据记录
over(order by salary rows between 50 perceding and 150 following)前50行,后150行
over(order by salary rows between unbounded preceding and unbounded following)所有行
over(order by salary range between unbounded preceding and unbounded following)所有行
二、 sum函数
功能描述:该函数计算组中表达式的累积和。
SAMPLE:下例计算同一经理下员工的薪水累积值
SELECT manager_id, last_name, salary,
SUM (salary) OVER (PARTITION BY manager_id ORDER BY salary
RANGE UNBOUNDED PRECEDING) l_csum
FROM employees
WHERE manager_id in (101,103,108);
三、 应用实例
1, 测试环境设置
设有销售表t_sales (subcompany,branch,region,customer,sale_qty); 存储客户的销售明细,记录如下所示。
Subcompany Branch Region Customer Sale_qty
北京分公司 北京经营部 片区1 客户1 1
北京分公司 北京经营部 片区1 客户1 1
北京分公司 北京经营部 片区1 客户2 1
北京分公司 北京经营部 片区1 客户2 1
北京分公司 北京经营部 片区2 客户1 1
北京分公司 北京经营部 片区2 客户1 1
北京分公司 北京经营部 片区2 客户2 1
北京分公司 北京经营部 片区2 客户2 1
北京分公司 其他经营部 片区1 客户1 1
北京分公司 其他经营部 片区1 客户1 1
北京分公司 其他经营部 片区1 客户2 1
北京分公司 其他经营部 片区1 客户2 1
北京分公司 其他经营部 片区2 客户1 1
北京分公司 其他经营部 片区2 客户1 1
北京分公司 其他经营部 片区2 客户2 1
北京分公司 其他经营部 片区2 客户2 1
create table t_sales(
subcompany varchar2(40),
branch varchar2(40),
region varchar2(40),
customer varchar2(40),
sale_qty numeric(18,4)
);
comment on table t_sales is '销售表,分析函数测试';
comment on column t_sales.subcompany is '分公司';
comment on column t_sales.branch is '经营部';
comment on column t_sales.region is '片区';
comment on column t_sales.customer is '客户';
comment on column t_sales.sale_qty is '销售数量';
2,问题提出
现在要求给出销售汇总报表,报表中需要提供的数据包括客户汇总,和客户在其上级机构中的销售比例。
Subcompany Branch Region Customer Sale_qty Rate
北京分公司 北京经营部 片区1 客户1 2 50%
北京分公司 北京经营部 片区1 客户2 2 50%
北京分公司 北京经营部 片区1 小计 4 50%
北京分公司 北京经营部 片区2 客户1 2 50%
北京分公司 北京经营部 片区2 客户2 2 50%
北京分公司 北京经营部 片区2 小计 4 50%
北京分公司 北京经营部 小计 小计 8 50%
北京分公司 北京经营部 片区1 客户1 2 50%
北京分公司 北京经营部 片区1 客户2 2 50%
北京分公司 北京经营部 片区1 小计 4 50%
北京分公司 北京经营部 片区2 客户1 2 50%
北京分公司 北京经营部 片区2 客户2 2 50%
北京分公司 北京经营部 片区2 小计 4 50%
北京分公司 北京经营部 小计 小计 8 50%
北京分公司 小计 小计 小计 16 100%
3,解决方案(方案1)
首先我们可以使用oracle对group by 的扩展功能rollup得到如下的聚合汇总结果。
select
subcompany,
branch,
region,
customer,
sum(sale_qty) sale_qty
from t_sales
group by rollup(subcompany,branch,region,customer);
Subcompany Branch Region Customer Sale_qty
北京分公司 北京经营部 片区1 客户1 2
北京分公司 北京经营部 片区1 客户2 2
北京分公司 北京经营部 片区1 4
北京分公司 北京经营部 片区2 客户1 2
北京分公司 北京经营部 片区2 客户2 2
北京分公司 北京经营部 片区2 4
北京分公司 北京经营部 8
北京分公司 其他经营部 片区1 客户1 2
北京分公司 其他经营部 片区1 客户2 2
北京分公司 其他经营部 片区1 4
北京分公司 其他经营部 片区2 客户1 2
北京分公司 其他经营部 片区2 客户2 2
北京分公司 其他经营部 片区2 4
北京分公司 其他经营部 8
北京分公司 16
16
分析上面的临时结果,我们看到:
明细到客户的汇总信息,其除数为当前的sum(sale_qty),被除数应该是到片区的小计信息。
明细到片区的汇总信息,其除数为片区的sum(sale_qty),被除数为聚合到经营部的汇总数据。
。。。
考虑到上述因素,我们可以使用oracle的开窗函数over,将数据定位到我们需要定位的记录。如下代码中,我们利用开窗函数over直接将数据定位到其上次的小计位置。
over(partition by decode(f_branch, 1, null, subcompany), decode(f_branch, 1, null, decode(f_region, 1, null, branch)), decode(f_branch, 1, null, decode(f_region, 1, null, decode(f_customer, 1, null, region))), null)
经整理后的查询语句如下。
select subcompany,
decode(f_branch, 1,subcompany||'(С¼Æ)', branch),
decode(f_region,1,branch||'(С¼Æ)',region),
decode(f_customer,1,region||'(С¼Æ)', customer),
sale_qty,
trim(to_char(round(sale_qty/
sum(sale_qty) over(partition by decode(f_branch, 1, null, subcompany), decode(f_branch, 1, null, decode(f_region, 1, null, branch)), decode(f_branch, 1, null, decode(f_region, 1, null, decode(f_customer, 1, null, region))), null),2) *100,99990.99))
from (select grouping(branch) f_branch,
grouping(region) f_region,
grouping(customer) f_customer,
subcompany,
branch,
region,
customer,
sum(sale_qty) sale_qty
from t_sales
group by subcompany, rollup(branch, region, customer))
Subcompany Branch Region Customer Sale_qty Rate
北京分公司 北京经营部 片区1 客户1 2 50.00
北京分公司 北京经营部 片区1 客户2 2 50.00
北京分公司 北京经营部 片区2 客户1 2 50.00
北京分公司 北京经营部 片区2 客户2 2 50.00
北京分公司 北京经营部 片区1 片区1(小计) 4 50.00
北京分公司 北京经营部 片区2 片区2(小计) 4 50.00
北京分公司 其他经营部 片区1 客户1 2 50.00
北京分公司 其他经营部 片区1 客户2 2 50.00
北京分公司 其他经营部 片区2 客户1 2 50.00
北京分公司 其他经营部 片区2 客户2 2 50.00
北京分公司 其他经营部 片区1 片区1(小计) 4 50.00
北京分公司 其他经营部 片区2 片区2(小计) 4 50.00
北京分公司 北京经营部 北京经营部(小计) (小计) 8 50.00
北京分公司 其他经营部 其他经营部(小计) (小计) 8 50.00
北京分公司 北京分公司(小计) (小计) (小计) 16 100.00
北京分公司 北京经营部 片区1 客户1 2 50.00
4,可能的另外一种解决方式(方案2)
select subcompany,
decode(f_branch, 1,subcompany||'(С¼Æ)', branch),
decode(f_region,1,branch||'(С¼Æ)',region),
decode(f_customer,1,region||'(С¼Æ)', customer),
sale_qty,
/* trim(to_char(round(sale_qty/*/
decode(f_branch+f_region+f_customer,
0,
(sum(sale_qty) over(partition by subcompany,branch,region))/2,
1,
(sum(sale_qty) over(partition by subcompany,branch))/3,
2,
(sum(sale_qty) over(partition by subcompany))/4 ,
sum(sale_qty) over()/4
)/*
,2) *100,99990.99))*/
from (select grouping(branch) f_branch,
grouping(region) f_region,
grouping(customer) f_customer,
subcompany,
branch,
region,
customer,
sum(sale_qty) sale_qty
from t_sales
group by subcompany, rollup(branch, region, customer))
在上面的解决方式中,最大的问题在于开窗函数过大。导致每次计算涉及到的行数过多,影响到执行的速度和效率。并且需要额外的计算处理清除多余叠加进去的数值 。
)
8. mysql怎么分析函数row
第一种方法:
select (@i:=@i+1) as i,table_name.* from table_name,(select @i:=0) as it
第二种方法:
set @rownum=0;
select @rownum:=@rownum+1 as rownum, t.username from auth_user t limit 1,5;
9. Oracle数据库函数有几种与作用
数值型函数:操作数字类型
字符型函数:操作字符型
日期型的函数:操作日期型
转换函数:转换类型
聚组函数:统计和、差、积等操作
分析函数:连续求和、排序等
其他函数:很多,没有表中分类