Oracle统计学函数-大数据分析介绍
ORACLE_分析函数大全
ORACLE_分析函数大全Oracle分析函数是一种高级SQL函数,它可以在查询中实现一系列复杂的分析操作。
这些函数可以帮助我们在数据库中执行各种数据分析和报表生成任务。
本文将介绍Oracle数据库中的一些常用分析函数。
1.ROW_NUMBER函数:该函数为查询结果中的每一行分配一个唯一的数字。
可以用它对结果进行排序或分组。
例如,可以使用ROW_NUMBER函数在结果集中为每个员工计算唯一的编号。
2.RANK和DENSE_RANK函数:这两个函数用于计算结果集中每个行的排名。
RANK函数返回相同值的行具有相同的排名,并且下一个排名值将被跳过。
DENSE_RANK函数类似,但是下一个排名值不会被跳过。
G和LEAD函数:LAG函数返回结果集中指定列的前一个(上一个)行的值,而LEAD函数返回后一个(下一个)行的值。
这些函数通常用于计算增长率或发现趋势。
4.FIRST和LAST函数:这两个函数用于返回结果集中分组的第一个和最后一个行的值。
可以与GROUPBY子句一起使用。
5.CUME_DIST函数:该函数用于计算给定值的累积分布。
它返回值的累积分布在结果集中的位置(百分比)。
6.PERCENT_RANK函数:该函数用于计算结果集中每个行的百分位数排名。
它返回值的百分位数排名(0到1之间的小数)。
7. NTILE函数:该函数用于将结果集分成指定数量的桶(Bucket),并为每个行分配一个桶号。
通常用于将数据分组为更小的块。
8.LISTAGG函数:该函数将指定列的值连接成一个字符串,并使用指定的分隔符分隔每个值。
可以用它将多个值合并在一起形成一个字符串。
9.AVG、SUM、COUNT和MAX/MIN函数:这些是常见的聚合函数,可以在分析函数中使用。
它们用于计算结果集中的平均值、总和、计数和最大/最小值。
以上只是Oracle数据库中的一些常用分析函数。
还有其他一些分析函数,如PERCENTILE_CONT、PERCENTILE_DISC等可以用于更高级的分析计算。
ORACLE统计函数大全
【一】、Oracle常用的统计函数Avg(x):求一组行中列x值的平均值count(x):求一组行中列x值的非空行数count(*):求一组行的总行数max(x):求一组行中列x值的最大值min(x):求一组行中列x值的最小值stddev(x):求一组行中列x值的标准差sum(x):求一组行中列x值的总和variance(x):求一组行中列x值的方差【二】、group by与统计函数使用上面介绍的函数时可以使用也可以不使用group by ,但在使用group by时,未在group by部分用到的列在select 部分出现时必须使用统计函数,如按角色统计平均年龄Select user_name,avg(age) from usersGroup by role_id; ×Select count(user_name),avg(age) from usersGroup by role_id√【三】、用having字句规定统计条件having 子句的作用类似于where子句,只不过where 子句针对单个行,而having子句针对的是统计结果,一般和统计的函数搭配使用。
Having子句后必须为前面select后面的子部分,或是group by 后面的字段select count(uer_name),avg(age) from users group by role_id having role_id>20; ×select count(uer_name),avg(age) from users group by role_id having avg(age)>20; √【四】其他oracle常用函数Decode(column1,value1,output1,value2,output2,…..)如果column1 有一个值为value1那么将会用output1 来代替当前值,如果column1 的值为value2 那么就用OUTPUT2 来代替当前值,如果column1 中哪两个值都不是,那么就会用OUTPUT3 来代替当前值Select decode(age,10,7,9,6,3),user_name from users;SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii(’A’) A,ascii(’a’) a,ascii(’0’) zero,ascii(’ ’) space from dual;A A ZERO SPACE--------- --------- --------- ---------65 97 48 322.CHR给出整数,返回对应的字符;SQL> select chr(54740) zhao,chr(65) chr65 from dual;ZH C-- -赵 A3.CONCAT连接两个字符串;SQL> select concat(’010-’,’88888888’)||’转23’ 高乾竞电话from dual;高乾竞电话----------------************转234.INITCAP返回字符串并将字符串的第一个字母变为大写;SQL> select initcap(’smith’) upp from dual;UPP-----Smith5.INSTR(C1,C2,I,J)在一个字符串中搜索指定的字符,返回发现指定的字符的位置;C1 被搜索的字符串C2 希望搜索的字符串I 搜索的开始位置,默认为1J 出现的位置,默认为1SQL> select instr(’oracle traning’,’ra’,1,2) instring from dual;INSTRING---------96.LENGTH返回字符串的长度;SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst; NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))------ ------------ ---------------- ------------ --------- --------------------高乾竞 3 北京市海锭区6 9999.99 77.LOWER返回字符串,并将所有的字符小写SQL> selec t lower(’AaBbCcDd’)AaBbCcDd from dual;AABBCCDDaabbccdd8.UPPER返回字符串,并将所有的字符大写SQL> select upper(’AaBbCcDd’) upper from dual;UPPER--------AABBCCDD9.RPAD和LPAD(粘贴字符)RPAD 在列的右边粘贴字符LPAD 在列的左边粘贴字符SQL> select lpad(rpad(’gao’,10,’*’),17,’*’)from dual;LPAD(RPAD(’GAO’,1-----------------*******gao*******不够字符则用*来填满10.LTRIM和RTRIMLTRIM 删除左边出现的字符串RTRIM 删除右边出现的字符串SQL> select ltrim(rtrim(’ gao qian jing ’,’ ’),’ ’) from dual;LTRIM(RTRIM(’-------------gao qian jing11.SUBSTR(string,start,count)取子字符串,从start开始,取count个SQL> select substr(’130****8888’,3,8)from dual;SUBSTR(’--------0888888812.REPLACE(’string’,’s1’,’s2’)string 希望被替换的字符或变量s1 被替换的字符串s2 要替换的字符串SQL> select replace(’he love you’,’he’,’i’) from d ual;REPLACE(’H----------i love you13.SOUNDEX返回一个与给定的字符串读音相同的字符串SQL> create table table1(xm varchar(8));SQL> insert into table1 values(’weather’);SQL> insert into table1 values(’wether’);SQL> insert into table1 values(’gao’);SQL> select xm from table1 where soundex(xm)=soundex(’weather’);--------weatherwether14.TRIM(’s’ from ’string’)LEADING 剪掉前面的字符TRAILING 剪掉后面的字符如果不指定,默认为空格符15.ABS返回指定值的绝对值SQL> select abs(100),abs(-100) from dual; ABS(100) ABS(-100)--------- ---------100 10016.ACOS给出反余弦的值SQL> select acos(-1) from dual;ACOS(-1)---------3.141592717.ASIN给出反正弦的值SQL> select asin(0.5) from dual;ASIN(0.5)---------.5235987818.ATAN返回一个数字的反正切值SQL> select atan(1) from dual;ATAN(1)---------.7853981619.CEIL返回大于或等于给出数字的最小整数SQL> select ceil(3.1415927) from dual; CEIL(3.1415927)---------------420.COS返回一个给定数字的余弦SQL> select cos(-3.1415927) from dual; COS(-3.1415927)----------------121.COSH返回一个数字反余弦值SQL> select cosh(20) from dual;COSH(20)---------24258259822.EXP返回一个数字e的n次方根SQL> select exp(2),exp(1) from dual;EXP(2) EXP(1)--------- ---------7.3890561 2.718281823.FLOOR对给定的数字取整数SQL> select floor(2345.67) from dual;FLOOR(2345.67)--------------234524.LN返回一个数字的对数值SQL> select ln(1),ln(2),ln(2.7182818) from dual;LN(1) LN(2) LN(2.7182818)--------- --------- -------------0 .69314718 .9999999925.LOG(n1,n2)返回一个以n1为底n2的对数SQL> select log(2,1),log(2,4) from dual;LOG(2,1) LOG(2,4)--------- ---------0 226.MOD(n1,n2)返回一个n1除以n2的余数SQL> select mod(10,3),mod(3,3),mod(2,3) from dual; MOD(10,3) MOD(3,3) MOD(2,3)--------- --------- ---------1 0 227.POWER返回n1的n2次方根SQL> select power(2,10),power(3,3) from dual; POWER(2,10) POWER(3,3)----------- ----------1024 2728.ROUND和TRUNC按照指定的精度进行舍入SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual; ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)----------- ------------ ----------- ------------56 -55 55 -5529.SIGN取数字n的符号,大于0返回1,小于0返回-1,等于0返回0SQL> select sign(123),sign(-100),sign(0) from dual;SIGN(123) SIGN(-100) SIGN(0)--------- ---------- ---------1 -1 030.SIN返回一个数字的正弦值SQL> select sin(1.57079) from dual;SIN(1.57079)------------131.SIGH返回双曲正弦的值SQL> select sin(20),sinh(20) from dual;SIN(20) SINH(20)--------- ---------.91294525 24258259832.SQRT返回数字n的根SQL> select sqrt(64),sqrt(10) from dual;SQRT(64) SQRT(10)--------- ---------8 3.162277733.TAN返回数字的正切值SQL> select tan(20),tan(10) from dual;TAN(20) TAN(10)--------- ---------2.2371609 .6483608334.TANH返回数字n的双曲正切值SQL> select tanh(20),tan(20) from dual;TANH(20) TAN(20)--------- ---------1 2.237160935.TRUNC按照指定的精度截取一个数SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;TRUNC1 TRUNC(124.16666,2)--------- ------------------100 124.1636.ADD_MONTHS增加或减去月份SQL> select to_char(add_months(to_date(’199912’,’yyyymm’),2),’yyyymm’) from dual;TO_CHA------200002SQL> s elect to_char(add_months(to_date(’199912’,’yyyymm’),-2),’yyyymm’) from dual;TO_CHA------199910ST_DAY返回日期的最后一天SQL> select to_char(sysdate,’yyyy.mm.dd’),to_char((sysdate)+1,’yyyy.mm.dd’) from dual;TO_CHAR(SY TO_CHAR((S---------- ----------2004.05.09 2004.05.10SQL> select last_day(sysdate) from dual;LAST_DAY(S----------31-5月-0438.MONTHS_BETWEEN(date2,date1)给出date2-date1的月份SQL> select months_between(’19-12月-1999’,’19-3月-1999’) mon_between from dual;MON_BETWEEN-----------9SQL>selectmonths_between(to_date(’2000.05.20’,’yyyy.mm.dd’),to_date(’2005.05.20’,’yyyy.mm.dd’)) mon_betw from dual; MON_BETW----------6039.NEW_TIME(date,’this’,’that’)给出在this时区=other时区的日期和时间SQL> select to_char(sysdate,’yyyy.mm.dd hh24:mi:ss’) bj_time,to_char(new_time2 (sysdate,’PDT’,’GMT’),’yyyy.mm.dd hh24:mi:ss’) los_angles from dual;BJ_TIME LOS_ANGLES------------------- -------------------2004.05.09 11:05:32 2004.05.09 18:05:32给出日期date和星期x之后计算下一个星期的日期S QL> select next_day(’18-5月-2001’,’星期五’) next_day from dual; NEXT_DAY----------25-5月-0141.SYSDATE用来得到系统的当前日期SQL> select to_char(sysdate,’dd-mm-yyyy day’) from dual;TO_CHAR(SYSDATE,’-----------------09-05-2004 星期日trunc(date,fmt)按照给出的要求将日期截断,如果fmt=’mi’表示保留分,截断秒SQL> select to_char(trunc(sysdate,’hh’),’yyyy.mm.dd hh24:mi:ss’) hh,2 to_char(trunc(sysdate,’mi’),’yyyy.mm.dd hh24:mi:ss’) hhmm from dual; HH HHMM------------------- -------------------2004.05.09 11:00:00 2004.05.09 11:17:0042.CHARTOROWID将字符数据类型转换为ROWID类型SQL> select rowid,rowidtochar(rowid),ename from scott.emp;ROWID ROWIDTOCHAR(ROWID) ENAME------------------ ------------------ ----------AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES43.CONVERT(c,dset,sset)将源字符串sset从一个语言字符集转换到另一个目的dset字符集SQL> select convert(’strutz’,’we8hp’,’f7dec’) "conversion" from dual; conver------strutz44.HEXTORAW将一个十六进制构成的字符串转换为二进制45.RAWTOHEXT将一个二进制构成的字符串转换为十六进制46.ROWIDTOCHAR将ROWID数据类型转换为字符类型47.TO_CHAR(date,’format’)SQL> select to_char(sysdate,’yyyy/mm/dd hh24:mi:ss’) from dual;TO_CHAR(SYSDATE,’YY-------------------2004/05/09 21:14:41将字符串转化为ORACLE中的一个日期49.TO_MULTI_BYTE将字符串中的单字节字符转化为多字节字符SQL> select to_multi_byte(’高’) from dual;TO--高50.TO_NUMBER将给出的字符转换为数字SQL> select to_number(’1999’) year from dual;YEAR---------199951.BFILENAME(dir,file)指定一个外部二进制文件SQL>insert into file_tb1 values(bfilename(’lob_dir1’,’image1.gif’));52.CONVERT(’x’,’desc’,’source’)将x字段或变量的源source转换为descSQL> select sid,serial#,username,decode(command,2 0,’none’,3 2,’insert’,4 3,5 ’select’,6 6,’update’,7 7,’delete’,8 8,’drop’,9 ’other’) cmd from v$session where type!=’background’;SID SERIAL# USERNAME CMD--------- --------- ------------------------------ ------1 1 none2 1 none3 1 none4 1 none5 1 none6 1 none7 1275 none8 1275 none9 20 GAO select10 40 GAO none53.DUMP(s,fmt,start,length)DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值SQL> col global_name for a30SQL> col dump_string for a50SQL> set lin 200SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name; GLOBAL_NAME DUMP_STRING------------------------------ --------------------------------------------------ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D54.EMPTY_BLOB()和EMPTY_CLOB()这两个函数都是用来对大数据类型字段进行初始化操作的函数55.GREATEST返回一组表达式中的最大值,即比较字符的编码大小.SQL> select greatest(’AA’,’AB’,’AC’) from dual;GR--ACSQL> select greatest(’啊’,’安’,’天’) from dual;GR--天56.LEAST返回一组表达式中的最小值SQL> select least(’啊’,’安’,’天’) from dual;LE--啊57.UID返回标识当前用户的唯一整数SQL> show userUSER 为"GAO"SQL> select username,user_id from dba_users where user_id=uid;USERNAME USER_ID------------------------------ ---------GAO 25ER返回当前用户的名字SQL> select user from dual;USER------------------------------GAOEREVN返回当前用户环境的信息,opt可以是:ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE ISDBA 查看当前用户是否是DBA如果是则返回trueSQL> select userenv(’isdba’) from dual;USEREN------FALSESQL> select userenv(’isdba’) from dual; USEREN------TRUESESSION返回会话标志SQL> select userenv(’sessionid’) from dual; USERENV(’SESSIONID’)--------------------152ENTRYID返回会话人口标志SQL> select userenv(’entryid’) from dual; USERENV(’ENTRYID’)------------------INSTANCE返回当前INSTANCE的标志SQL> select userenv(’instance’) from dual; USERENV(’INSTANCE’)-------------------1LANGUAGE返回当前环境变量SQL> select userenv(’language’) from dual; USERENV(’LANGUAGE’)---------------------------------------------------- SIMPLIFIED CHINESE_CHINA.ZHS16GBK LANG返回当前环境的语言的缩写SQL> select userenv(’lang’) from dual; USERENV(’LANG’)----------------------------------------------------ZHSTERMINAL返回用户的终端或机器的标志SQL> select userenv(’terminal’) from dual; USERENV(’TERMINA----------------GAOVSIZE(X)返回X的大小(字节)数SQL> select vsize(user),user from dual; VSIZE(USER) USER----------- ------------------------------6 SYSTEM60.AVG(DISTINCT|ALL)all表示对所有的值求平均值,distinct只对不同的值求平均值SQLWKS> create table table3(xm varchar(8),sal number(7,2));语句已处理。
oracle常见函数:平均值、总数、最小值、最大值、总和、标准差
oracle常见函数:平均值、总数、最⼩值、最⼤值、总和、标准差sql函数包括如下:avg函数:计算查询中某⼀特定字段资料的算术平均值。
count函数:计算符合查询条件的记录数。
min, max函数:传回指定字段之中符合查询条件的第⼀条、最末条记录的资料。
first, last函数:传回指定字段之中符合查询条件的最⼩值、最⼤值。
stdev函数:计算指定字段之中符合查询条件的标准差。
sum函数:计算指定字段之中符合查询条件的资料总和。
var,函数:计算指定字段之中符合查询条件的变异数估计值。
详细描述如下:avg函数avg函数,计算查询中某⼀特定字段资料的算术平均值。
语法为avg(运算式)。
运算式,可为字段名称、运算式、或⼀个函数,此函数可以是⼀个内部或使⽤者定义的,但不能为其它的sql函数。
avg函数在计算时,不包含任何值为null的资料。
count函数count函数,计算符合查询条件的记录条数。
语法为count (运算式)。
运算式,可为字段名称、*、多个字段名称、运算式、或⼀个函数,此函数可以是⼀个内部或使⽤者定义的,但不能为其它的sql函数。
count 函数於计算时,不包含任何值为null的资料。
但是,count(*) 则计算所有符合查询条件的记录条数,包含那些null的资料。
如果count(字段名称) 的字段名称为多个字段,将字段名称之间使⽤ & 分隔。
多个字段当中,⾄少有⼀个字段的值不为null的情况下,count函数才会计算为⼀条记录。
如果多个字段都为null,则不算是⼀条记录。
譬如:select count(价格 & 代号) from产品first/last函数 first函数、last函数,传回指定字段之中符合查询条件的第⼀条、最末条记录的资料。
语法为first(运算式) 和 last(运算式)。
运算式,可为字段名称、运算式、或⼀个函数,此函数可以是⼀个内部或使⽤者定义的,但不能为其它的sql函数。
oracle统计个数的函数
Oracle统计个数的函数在Oracle数据库中,有几个特定的函数可以用于统计个数。
这些函数可以用于计算满足特定条件的行数或返回不同值的个数。
以下是一些常用的统计个数的函数:•COUNT()•COUNT(DISTINCT)•SUM(CASE WHEN … THEN …)•GROUP BY和HAVING子句下面将详细解释每个函数的定义、用途和工作方式。
1. COUNT()定义: COUNT()函数用于计算满足特定条件的行数。
用途: COUNT()函数可以用于计算表中满足特定条件的行数,也可以用于计算表中的所有行数。
工作方式: COUNT()函数的语法如下:COUNT(expression)其中,expression是要计算行数的列或表达式。
COUNT()函数返回一个整数,表示满足条件的行数。
如果不指定expression,COUNT()函数将计算表中的所有行数。
如果指定expression,COUNT()函数将计算满足expression条件的行数。
示例:-- 计算表中的所有行数SELECT COUNT(*) FROM employees;-- 计算满足特定条件的行数SELECT COUNT(*) FROM employees WHERE salary > 5000;2. COUNT(DISTINCT)定义: COUNT(DISTINCT)函数用于计算不同值的个数。
用途: COUNT(DISTINCT)函数可以用于计算表中某列的不同值的个数。
工作方式: COUNT(DISTINCT)函数的语法如下:COUNT(DISTINCT expression)其中,expression是要计算不同值个数的列或表达式。
COUNT(DISTINCT)函数返回一个整数,表示不同值的个数。
示例:-- 计算表中某列的不同值个数SELECT COUNT(DISTINCT department_id) FROM employees;3. SUM(CASE WHEN … THEN …)定义:SUM(CASE WHEN … THEN …)函数用于根据条件计算列的和。
oracle 方差函数
oracle 方差函数Oracle方差函数是一种统计函数,用来计算一组数据的方差。
方差是一种衡量数据分散程度的指标,可以帮助我们了解数据的离散程度和波动情况。
在数据分析和统计建模中,方差函数是非常重要的工具之一。
方差是一个统计学中的概念,用来衡量一组数据的离散程度。
它的计算公式是将每个数据与数据均值之差的平方求和,然后除以数据个数。
方差的值越大,表示数据的离散程度越大,反之则表示数据的集中程度较高。
在Oracle数据库中,我们可以使用VAR函数来计算一组数据的方差。
VAR函数的使用非常简单,只需要将要计算方差的列名作为参数传入即可。
例如,我们有一张名为"sales"的表,其中有一列"amount"表示销售额,我们可以使用以下SQL语句计算销售额的方差:SELECT VAR(amount) FROM sales;VAR函数会返回销售额的方差值。
需要注意的是,VAR函数会自动忽略NULL值,因此在计算方差之前不需要额外的处理。
除了VAR函数,Oracle数据库还提供了其他一些方差相关的函数,如VAR_POP和VAR_SAMP。
VAR_POP函数用于计算总体方差,而VAR_SAMP函数用于计算样本方差。
这两个函数的使用方法与VAR 函数类似,只需要将相应的列名作为参数传入即可。
除了使用方差函数来计算数据的离散程度,我们还可以使用方差函数来进行数据分析和决策支持。
例如,在销售数据分析中,我们可以使用方差来评估不同产品的销售波动情况,从而判断产品的市场表现和销售策略的有效性。
又如,在投资组合管理中,我们可以使用方差来衡量不同资产的风险,从而帮助投资者做出合理的投资决策。
Oracle方差函数是一种非常实用的统计函数,可以帮助我们计算数据的离散程度,进行数据分析和决策支持。
通过合理地使用方差函数,我们可以更好地理解和利用数据,从而提高工作效率和决策质量。
希望本文对读者理解和应用Oracle方差函数有所帮助。
oracle的count函数
Oracle的COUNT函数介绍在Oracle数据库中,COUNT函数是一种聚合函数,用于查询满足指定条件的行数。
COUNT函数的语法为:COUNT(expr)其中,expr是要统计的列或表达式。
COUNT函数会返回该列或表达式的非空值的数量。
COUNT函数可以与其他数据库函数(如SUM、MAX、MIN等)一起使用,也可以与GROUP BY子句一起使用以对结果分组。
本文将深入探讨Oracle的COUNT函数,包括使用方法、常见应用场景等。
使用方法COUNT函数可以用于不同的场景和用途,具体取决于expr参数的使用方式。
下面是一些常见的使用方法:统计表中的行数SELECT COUNT(*) FROM table_name;上述语句将返回表table_name中的总行数。
COUNT函数的参数使用通配符*,表示统计所有行。
统计某列的非空值数量SELECT COUNT(column_name) FROM table_name;上述语句将返回表table_name中列column_name的非空值数量。
COUNT函数的参数为具体的列名。
结合条件统计行数SELECT COUNT(*) FROM table_name WHERE condition;上述语句将返回表table_name中满足条件condition的行数。
可以根据实际需要对条件进行组合和筛选。
常见应用场景COUNT函数在数据分析和报表生成等场景中具有广泛的应用。
以下是一些常见的应用场景:统计订单数量SELECT COUNT(*) FROM orders;通过COUNT函数,可以轻松统计订单表中的订单数量。
对于电商平台等需要分析销售数据的场景很有用。
筛选满足条件的行数SELECT COUNT(*) FROM products WHERE price > 1000;通过COUNT函数结合条件语句,可以筛选出满足特定条件的行数。
例如,上述语句统计了价格大于1000的产品数量。
oracle常用的分析函数
oracle常⽤的分析函数常⽤的分析函数如下所列:row_number() over(partition by ... order by ...)rank() over(partition by ... order by ...)dense_rank() over(partition by ... order by ...)count() over(partition by ... order by ...)max() over(partition by ... order by ...)min() over(partition by ... order by ...)sum() over(partition by ... order by ...)avg() over(partition by ... order by ...)first_value() over(partition by ... order by ...)last_value() over(partition by ... order by ...)lag() over(partition by ... order by ...)lead() over(partition by ... order by ...)⼀、Oracle分析函数简介:在⽇常的⽣产环境中,我们接触得⽐较多的是OLTP系统(即Online Transaction Process),这些系统的特点是具备实时要求,或者⾄少说对响应的时间多长有⼀定的要求;其次这些系统的业务逻辑⼀般⽐较复杂,可能需要经过多次的运算。
⽐如我们经常接触到的电⼦商城。
在这些系统之外,还有⼀种称之为OLAP的系统(即Online Aanalyse Process),这些系统⼀般⽤于系统决策使⽤。
通常和数据仓库、数据分析、数据挖掘等概念联系在⼀起。
这些系统的特点是数据量⼤,对实时响应的要求不⾼或者根本不关注这⽅⾯的要求,以查询、统计操作为主。
oracle 分组统计函数
oracle 分组统计函数Oracle是一种流行的关系型数据库管理系统,具有强大的分组统计函数,可以帮助用户轻松实现数据分析和汇总。
在本文中,我们将介绍几种常用的Oracle分组统计函数,并说明它们的用途和功能。
GROUP BY子句是SQL语句中用于对查询结果进行分组的重要部分。
在Oracle中,可以结合使用GROUP BY子句和聚合函数来实现数据的分组统计。
以下是几种常用的Oracle分组统计函数:1. COUNT函数:COUNT函数用于统计查询结果集中行的数量。
可以结合GROUP BY子句使用,以实现对分组数据的计数统计。
例如,可以使用COUNT(*)来统计每个分组中的行数,或者使用COUNT(column_name)来统计指定列中非空值的数量。
2. SUM函数:SUM函数用于计算指定列的合计值。
可以结合GROUP BY子句使用,以实现对分组数据的求和统计。
例如,可以使用SUM(column_name)来计算每个分组中指定列的合计值。
3. AVG函数:AVG函数用于计算指定列的平均值。
可以结合GROUP BY子句使用,以实现对分组数据的平均值统计。
例如,可以使用AVG(column_name)来计算每个分组中指定列的平均值。
4. MAX函数:MAX函数用于找出指定列的最大值。
可以结合GROUP BY子句使用,以实现对分组数据的最大值统计。
例如,可以使用MAX(column_name)来找出每个分组中指定列的最大值。
5. MIN函数:MIN函数用于找出指定列的最小值。
可以结合GROUP BY子句使用,以实现对分组数据的最小值统计。
例如,可以使用MIN(column_name)来找出每个分组中指定列的最小值。
除了上述常用的分组统计函数外,Oracle还提供了其他一些函数,如STDDEV、VARIANCE等,用于计算标准差和方差等统计指标。
这些函数可以帮助用户更全面地分析数据,发现数据的规律和趋势。
oracle统计个数的函数
oracle统计个数的函数Oracle是一种常用的关系型数据库管理系统,它提供了丰富的函数和工具来处理和分析数据。
其中,统计个数的函数是Oracle中非常常用的一种函数,它可以帮助我们快速准确地统计某个字段或某个条件下的数据个数。
在Oracle中,统计个数的函数有很多种,常用的有COUNT、COUNT(*)、COUNT(DISTINCT)等。
下面我将分别介绍这几种函数的用法和特点。
首先是COUNT函数,它是最常用的统计个数的函数之一。
COUNT 函数的语法是COUNT(expression),其中expression可以是一个字段、一个表达式或一个常量。
COUNT函数会统计expression不为NULL的记录个数,并返回结果。
例如,我们可以使用COUNT函数统计一个表中某个字段不为NULL的记录个数:SELECT COUNT(column_name) FROM table_name;接下来是COUNT(*)函数,它是COUNT函数的一种特殊形式。
COUNT(*)函数会统计表中所有记录的个数,不管记录中的字段是否为NULL。
这个函数比较常用,特别是在需要统计整个表的记录个数时。
例如,我们可以使用COUNT(*)函数统计一个表中所有记录的个数:SELECT COUNT(*) FROM table_name;最后是COUNT(DISTINCT)函数,它用于统计某个字段的不重复值的个数。
COUNT(DISTINCT)函数的语法是COUNT(DISTINCTexpression),其中expression是一个字段或一个表达式。
COUNT(DISTINCT)函数会统计expression字段中不重复的值的个数,并返回结果。
例如,我们可以使用COUNT(DISTINCT)函数统计一个表中某个字段的不重复值的个数:SELECT COUNT(DISTINCT column_name) FROM table_name;除了上述介绍的几种常用的统计个数的函数外,Oracle还提供了其他一些函数,如SUM、AVG、MAX、MIN等,它们可以用于统计字段的总和、平均值、最大值、最小值等。
Oracle之分析函数
Oracle之分析函数⼀、分析函数 1、分析函数 分析函数是Oracle专门⽤于解决复杂报表统计需求的功能强⼤的函数,它可以在数据中进⾏分组然后计算基于组的某种统计值,并且每⼀组的每⼀⾏都可以返回⼀个统计值。
2、分析函数和聚合函数的区别 普通的聚合函数⽤group by分组,每个分组返回⼀个统计值,⽽分析函数采⽤partition by分组,并且每组每⾏都可以返回⼀个统计值。
3、分析函数的形式 分析函数带有⼀个开窗函数over(),包含分析⼦句。
分析⼦句⼜由下⾯三部分组成: partition by :分组⼦句,表⽰分析函数的计算范围,不同的组互不相⼲; ORDER BY:排序⼦句,表⽰分组后,组内的排序⽅式; ROWS/RANGE:窗⼝⼦句,是在分组(PARTITION BY)后,组内的⼦分组(也称窗⼝),此时分析函数的计算范围窗⼝,⽽不是PARTITON。
窗⼝有两种,ROWS和RANGE; 使⽤形式如下:OVER(PARTITION BY xxx PORDER BY yyy ROWS BETWEEN rowStart AND rowEnd) 注:窗⼝⼦句在这⾥我只说rows⽅式的窗⼝,range⽅式和滑动窗⼝也不提。
⼆、OVER() 函数 1、sql 查询语句的 order by 和 OVER() 函数中的 ORDER BY 的执⾏顺序 分析函数是在整个sql查询结束后(sql语句中的order by的执⾏⽐较特殊)再进⾏的操作, 也就是说sql语句中的order by也会影响分析函数的执⾏结果: [1] 两者⼀致:如果sql语句中的order by满⾜分析函数分析时要求的排序,那么sql语句中的排序将先执⾏,分析函数在分析时就不必再排序; [2] 两者不⼀致:如果sql语句中的order by不满⾜分析函数分析时要求的排序,那么sql语句中的排序将最后在分析函数分析结束后执⾏排序。
2、分析函数中的分组/排序/窗⼝分析函数包含三个分析⼦句:分组(partition by),排序(order by),窗⼝(rows/range)窗⼝就是分析函数分析时要处理的数据范围,就拿sum来说,它是sum窗⼝中的记录⽽不是整个分组中的记录,因此我们在想得到某个栏位的累计值时,我们需要把窗⼝指定到该分组中的第⼀⾏数据到当前⾏, 如果你指定该窗⼝从该分组中的第⼀⾏到最后⼀⾏,那么该组中的每⼀个sum值都会⼀样,即整个组的总和。
Oracle分析函数sumover介绍
Oracle分析函数sumover介绍其中,sum over函数是一种常用的分析函数,它用于对指定列进行求和计算,并返回每一行的累计总和。
以下是sum over函数的基本语法:```SUM(expression) OVER (PARTITION BY col1 [, col2, ...] ORDER BY col3 [, col4, ...] [ROWS <frame specification>])```其中,expression是要进行求和的列或表达式,col1、col2等是用于分组的列,col3、col4等是用于排序的列,frame specification是用于定义计算总和的范围。
sum over函数的作用可以通过一个简单的示例来说明。
假设我们有一个包含销售订单的表,其中包含订单号、产品名称和销售量等列。
我们想要计算每个产品的累计销售量,可以使用sum over函数来实现:```sqlSELECT order_id, product_name, sales_quantity,SUM(sales_quantity) OVER (PARTITION BY product_name ORDER BYorder_id) AS cumulative_salesFROM sales_orders;```在上述示例中,我们使用了PARTITION BY子句来按照产品名称进行分组,然后使用ORDER BY子句按照订单号进行排序。
通过在SUM函数中使用over子句,我们可以计算每个产品的累计销售量,并将结果作为新的列返回。
除了基本的用法之外,sum over函数还可以与其他函数组合使用,进一步扩展其功能。
例如,我们可以使用sum over函数来计算百分比:```sqlSELECT order_id, product_name, sales_quantity,sales_quantity / SUM(sales_quantity) OVER (PARTITION BY product_name) * 100 AS percentageFROM sales_orders;```在上述示例中,我们使用SUM函数计算每个产品的总销售量,并将结果作为分母,然后将每个销售数量除以总销售量并乘以100,得到每个产品的销售百分比。
Oracle数据库的数据统计(Analyze)
SQL> analyz e tableemploy ee comput e statis tics;表已分析。
SQL> set autotr ace onSQL> select count(*) from employ ee ;COUNT(*)----------299999Execut ion Plan----------------------------------------------------------0 SELECT STATEM ENT Optimi zer=CHOOSE (Cost=7 Card=1)1 0 SORT (AGGREG ATE)2 1 BITMAP CONVER SION(COUNT)3 2 BITMAP INDEX(FAST FULL SCAN) OF 'IDX_BM P_EMP_SEX'Statis tics----------------------------------------------------------153 recurs ive calls0 db blockgets96 consis tentgets11 physic al reads0 redo size370 bytessent via SQL*Net to client425 bytesreceiv ed via SQL*Net from client2 SQL*Net roundt ripsto/from client0 sorts(memory)0 sorts(disk)1 rows proces sedSQL> analyz e tableemploy ee delete statis tics;表已分析。
SQL> select count(*) from employ ee;COUNT(*)----------299999Execut ion Plan----------------------------------------------------------0 SELECT STATEM ENT Optimi zer=CHOOSE1 0 SORT (AGGREG ATE)2 1 TABLEACCESS (FULL) OF 'EMPLOY EE'Statis tics----------------------------------------------------------0 recurs ive calls0 db blockgets5418 consis tentgets3144 physic al reads0 redo size370 bytessent via SQL*Net to client425 bytesreceiv ed via SQL*Net from client2 SQL*Net roundt ripsto/from client0 sorts(memory)0 sorts(disk)1 rows proces sedSQL> analyz e tableempplo yee ESTIMA TE statis tics; analyz e tableempplo yee ESTIMA TE statis tics*ERROR位于第1 行:ORA-00942:表或视图不存在SQL> analyz e tableemploy ee ESTIMA TE statis tics;SQL> select count(*) from employ ee;COUNT(*)----------299999Execut ion Plan----------------------------------------------------------0 SELECT STATEM ENT Optimi zer=CHOOSE (Cost=7 Card=1)1 0 SORT (AGGREG ATE)2 1 BITMAP CONVER SION(COUNT)3 2 BITMAP INDEX(FAST FULL SCAN) OF 'IDX_BM P_EMP_SEX'Statis tics----------------------------------------------------------0 recurs ive calls0 db blockgets12 consis tentgets8 physic al reads0 redo size370 bytessent via SQL*Net to client425 bytesreceiv ed via SQL*Net from client2 SQL*Net roundt ripsto/from client0 sorts(memory)0 sorts(disk)1 rows proces sedSQL> analyz e tableemploy ee delete statis tics;表已分析。
oracle 函数的用法
oracle 函数的用法Oracle 是一个非常强大的数据库管理系统,它提供了丰富的函数库,可以让我们在SQL 语句中使用各种函数来实现数据处理、计算和查询。
本文将给大家介绍一些常用的Oracle 函数及其用法。
一、字符串函数1. UPPER 函数:将字符串转换为大写字母。
SELECT UPPER('hello world!') FROM DUAL;结果为:HELLO WORLD!结果为:hello world!3. INSTR 函数:查找子字符串在字符串中第一次出现的位置。
结果为:54. SUBSTR 函数:截取字符串的一部分。
5. REPLACE 函数:将字符串中的某个子串替换为另一个子串。
二、数值函数1. ROUND 函数:将指定的数字四舍五入到指定的小数位数。
3. ABS 函数:计算数字的绝对值。
4. SIGN 函数:返回数字的符号,如果为正数返回 1,为负数返回 -1,为零返回 0。
SELECT SIGN(-10), SIGN(10), SIGN(0) FROM DUAL;结果为:-1 1 05. POWER 函数:计算一个数的指定次幂。
三、日期函数1. SYSDATE 函数:返回当前系统日期和时间。
SELECT SYSDATE FROM DUAL;2. MONTHS_BETWEEN 函数:计算两个日期之间相差的月数。
SELECT MONTHS_BETWEEN('2022-01-01', '2021-01-01') FROM DUAL;3. ADD_MONTHS 函数:对指定日期增加指定的月数。
4. TRUNC 函数:截取日期到指定的精度,例如截取到月份。
5. TO_CHAR 函数:将日期类型转换为字符串类型。
SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') FROM DUAL;结果为:2021-08-01 14:00:00四、聚合函数1. COUNT 函数:计算查询结果集中的行数。
oracle统计个数的函数
oracle统计个数的函数Oracle是一种强大的数据库管理系统,它提供了许多函数来处理和分析数据。
其中之一就是用于统计个数的函数。
在本文中,我将为您介绍一些常用的Oracle统计个数的函数,并提供相应的示例。
1. COUNT函数COUNT函数用于统计满足指定条件的行数。
它可以作用于单个列、多个列或整个表。
以下是COUNT函数的语法:```SELECT COUNT(column_name) FROM table_name WHERE condition;```其中,column_name是要进行统计的列名,table_name是要进行统计的表名,condition是筛选条件(可选)。
示例1:我们有一个名为"students"的表,其中包含了学生的信息。
现在,我们想统计表中所有学生的个数。
可以使用以下SQL语句:```SELECT COUNT(*) FROM students;```这将返回表中所有学生的个数。
示例2:假设我们只想统计表中英语成绩超过60分的学生个数,可以使用以下SQL语句:```SELECT COUNT(*) FROM students WHERE English > 60;```这将返回英语成绩超过60分的学生个数。
2. SUM函数SUM函数用于计算指定列的数值总和。
它常用于对数值进行求和操作。
以下是SUM函数的语法:```SELECT SUM(column_name) FROM table_name WHERE condition;```其中,column_name是要进行求和的列名,table_name是要进行求和的表名,condition是筛选条件(可选)。
示例3:假设我们有一个名为"sales"的表,其中包含了销售数据。
现在,我们想计算表中所有销售额的总和。
可以使用以下SQL语句:```SELECT SUM(sales_amount) FROM sales;```这将返回表中所有销售额的总和。
oracle数学函数
oracle数学函数Oracle数学函数是Oracle数据库中提供的一组函数,用于进行数学运算和处理数值数据。
这些函数可以用于计算、转换和处理数值,使得数据处理更加灵活和高效。
本文将介绍几个常用的Oracle数学函数,并详细说明其用法和功能。
1. ROUND函数ROUND函数用于对数值进行四舍五入。
它接受两个参数,第一个参数是要进行四舍五入的数值,第二个参数是要保留的小数位数。
例如,ROUND(3.14159, 2)将返回3.14,表示将3.14159四舍五入到小数点后两位。
2. TRUNC函数TRUNC函数用于截断数值,即将数值的小数部分截断掉。
它接受两个参数,第一个参数是要进行截断的数值,第二个参数是要保留的小数位数。
例如,TRUNC(3.14159, 2)将返回3.14,表示将3.14159截断到小数点后两位。
3. MOD函数MOD函数用于计算两个数的余数。
它接受两个参数,第一个参数是被除数,第二个参数是除数。
例如,MOD(10, 3)将返回1,表示10除以3的余数为1。
4. POWER函数POWER函数用于计算一个数的幂。
它接受两个参数,第一个参数是底数,第二个参数是指数。
例如,POWER(2, 3)将返回8,表示计算2的3次幂。
5. SQRT函数SQRT函数用于计算一个数的平方根。
它接受一个参数,即要计算平方根的数值。
例如,SQRT(9)将返回3,表示计算9的平方根。
6. ABS函数ABS函数用于计算一个数的绝对值。
它接受一个参数,即要计算绝对值的数值。
例如,ABS(-5)将返回5,表示计算-5的绝对值。
7. EXP函数EXP函数用于计算以自然对数为底的指数幂。
它接受一个参数,即要计算指数幂的数值。
例如,EXP(1)将返回2.71828,表示计算e 的1次幂。
8. LOG函数LOG函数用于计算一个数的自然对数。
它接受一个参数,即要计算自然对数的数值。
例如,LOG(10)将返回2.30259,表示计算以e 为底的对数。
oracle数学函数
oracle数学函数Oracle数据库提供了许多用于数学计算和数值操作的函数。
本文将介绍Oracle中的一些常用数学函数,包括四舍五入、取绝对值、取余数、求平方根、指数和对数等。
一、四舍五入函数1.ROUNDROUND函数用于四舍五入到指定的位数。
以下是ROUND函数的一些常见用法:ROUND(number):将number四舍五入到最近的整数。
ROUND(number, decimal_places):将number四舍五入到指定的小数位数。
2.TRUNCTRUNC函数用于截断小数部分并保留整数部分。
以下是TRUNC函数的一些常见用法:TRUNC(number):将number截断到最近的整数。
TRUNC(number, decimal_places):将number截断到指定的小数位数。
二、取绝对值函数1.ABSABS函数用于取一个数的绝对值。
ABS(number):返回number的绝对值。
三、取余数函数1.MODMOD函数用于取两个数的余数。
MOD(dividend, divisor):返回dividend除以divisor的余数。
四、求平方根函数1.SQRTSQRT函数用于计算一个数的平方根。
SQRT(number):返回number的平方根。
五、指数和对数函数1.EXPEXP函数用于计算指定数的指数值。
EXP(number):返回e的number次幂,其中e是自然对数的底数。
2.LNLN函数用于计算指定数的自然对数。
LN(number):返回number的自然对数。
3.POWERPOWER函数用于计算一个数的指定次幂。
POWER(base, exponent):返回base的exponent次幂。
以上就是Oracle中一些常用的数学函数。
这些函数可以帮助开发者进行数学计算和数值操作,提高数据处理的灵活性和准确性。
使用合适的数学函数可以减少开发工作量,增加程序的效率和可读性。
oracle分位数函数
oracle分位数函数Oracle分位数函数是一种用于计算数据的分位数的数学函数。
分位数函数是该数据集中的值,其将数据集分为了若干等份。
在统计学中,分位数用于将给定的数据集划分为有序部分。
分位数还用于反映一个给定数据集的中心点和其变异程度。
Oracle分位数函数是巨大的数据库系统Oracle的一个组成部分。
这些函数可以在Oracle数据库中使用,帮助用户计算和处理大量数据。
Oracle中有四个不同的分位数函数。
这些函数都基于SQL语法,可以在SQL(结构化查询语言)查询中使用。
其中,四个分位数函数是:PERCENTILE_CONT:计算连续分布上的第p百分位数(连续分位数函数)。
PERCENTILE_DISC:计算离散分布上的第p百分位数(脱落分位数函数)。
MEDIAN:计算一个数据集的中位数。
QUARTILE:在数据集上计算四分位数(第1个、第2个和第3个四分位数)。
这四个函数中最常用的是PERCENTILE_CONT和PERCENTILE_DISC两个函数。
它们是Oracle数据库中计算分位数的主要函数。
PERCENTILE_CONT函数可以帮助你计算分布上的百分位数。
它返回连续分布上的分位数。
该函数的语法如下:PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY expr) [OVER (PARTITION BY partitioning)]其中,p是要计算的分位数百分比,expr是基于其计算分位数的表达式,partitioning是可选的分区语句。
该函数会将值从expr列按升序排序,然后使用线性内插法来计算指定百分比的分位数值。
如果分布上没有精确的分位数,该函数将返回一个近似值。
下面是一些示例:SELECT PERCENTILE_CONT(.25) WITHIN GROUP (ORDER BY salary) OVER () "1st Quartile", PERCENTILE_CONT(.5) WITHIN GROUP (ORDER BY salary) OVER () "Median", PERCENTILE_CONT(.75) WITHIN GROUP (ORDER BY salary) OVER () "3rd Quartile"FROM employees;MEDIAN(expr)其中,expr是要计算中位数的表达式。
oracle统计查询方法
oracle统计查询方法Oracle是一种强大的关系型数据库管理系统,它提供了丰富的统计查询方法,用于帮助用户对数据库中的数据进行分析和统计。
本文将介绍一些常用的Oracle统计查询方法,帮助读者更好地利用Oracle进行数据分析和统计。
一、基本统计查询方法1. COUNT函数:COUNT函数用于统计某个列或表中的记录数。
例如,可以使用SELECT COUNT(*) FROM table_name来统计表中的记录数。
2. SUM函数:SUM函数用于计算某个列的总和。
例如,可以使用SELECT SUM(salary) FROM employees来计算员工表中的薪水总和。
3. AVG函数:AVG函数用于计算某个列的平均值。
例如,可以使用SELECT AVG(salary) FROM employees来计算员工表中的平均薪水。
4. MAX函数和MIN函数:MAX函数和MIN函数分别用于计算某个列的最大值和最小值。
例如,可以使用SELECT MAX(salary) FROM employees来计算员工表中的最高薪水。
二、分组统计查询方法1. GROUP BY子句:GROUP BY子句用于按照某个列的值进行分组,并对每个分组进行统计。
例如,可以使用SELECT department_id, COUNT(*) FROM employees GROUP BY department_id来统计每个部门的员工人数。
2. HAVING子句:HAVING子句用于对分组后的结果进行条件过滤。
例如,可以使用SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 10来统计员工人数大于10人的部门。
三、高级统计查询方法1. JOIN操作:JOIN操作用于将多个表按照某个列进行关联,从而进行联合查询和统计。
oracle标准差函数
oracle标准差函数标准差是一种用来衡量数据集离散程度的统计量,它是描述数据分布的一种重要度量。
在统计学和数据分析中,标准差被广泛应用于描述数据的变化程度,并通常与均值一起使用。
Oracle是一种流行的关系型数据库管理系统,提供了丰富的函数和工具,用于进行数据分析和计算。
其中之一就是标准差函数。
在Oracle中,标准差函数用于计算给定数据集的标准差。
标准差函数有两种形式:总体标准差和样本标准差。
总体标准差是对整个数据集进行计算,而样本标准差是对数据集中的一个子集进行计算。
Oracle中的标准差函数是以STDDEV为前缀,后面跟着一个括号,括号中是要计算标准差的列名。
如果要计算整个数据集的标准差,则只需将列名作为参数传递给标准差函数即可。
下面是一个示例,展示如何在Oracle中使用标准差函数计算给定数据集的标准差:```SELECT STDDEV(column_name) AS standard_deviationFROM table_name;```在上面的示例中,`column_name`是要计算标准差的列名,`table_name`是数据表的名称。
执行以上SQL语句后,将返回一个结果集,其中包含计算得到的标准差值。
需要注意的是,标准差函数在进行计算时,会自动排除空值(NULL值)。
如果数据集中包含空值,则标准差函数将忽略这些空值进行计算。
除了计算整个数据集的标准差,Oracle还提供了一种计算多个数据列标准差的方法。
可以在标准差函数中传递多个列名作为参数,用逗号分隔。
示例如下:```SELECT STDDEV(column1, column2, column3) AS standard_deviationFROM table_name;```上面的示例中,`column1`、`column2`和`column3`是要计算标准差的列名,`table_name`是数据表的名称。
执行以上SQL语句后,将返回一个结果集,其中包含计算得到的标准差值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL Statistical FunctionsMake Big Data + Analytics SimpleCharlie Berger, MS Engineering, MBASr. Director Product Management, Data Mining and Advanced Analytics charlie.berger@ /CharlieDataMineData, data everywhereData Analysis platforms requirements:•Be extremely powerful and handle large data volumes •Be easy to learn•Be highly automated & enable deploymentGrowth of Data Exponentially Greater than Growth of Data Analysts!/more-data-than-analysts-the-real-big-data-problem/Analytics + Data Warehouse + Hadoop•Platform Sprawl–More Duplicated Data–More Data Movement Latency–More Security challenges–More Duplicated Storage–More Duplicated Backups–More Duplicated Systems–More Space and PowerOracle Advanced Analytics Database EvolutionAnalytical SQL in the Database 1998 1999 2002 2005 2008 2004 20112014•7 Data Mining “Partners” •Oracle acquiresThinking Machine Corp’s dev. team +“Darwin” data mining software •Oracle Data Mining 10gR2 SQL - 7 new SQL dm algorithms and new Oracle Data Miner “Classic” wizards driven GUI •SQL statistical functions introduced •New algorithms (EM,PCA, SVD)•Predictive Queries •SQLDEV/Oracle Data Miner 4.0 SQL scriptgeneration and SQL Query node (R integration) •OAA/ORE 1.3 + 1.4 adds NN, Stepwise,scalable R algorithms •Oracle Adv. Analytics for Hadoop Connectorlaunched with scalable BDA algorithms•Oracle Data Mining 9.2i launched – 2 algorithms (NB and AR) via Java API •ODM 11g & 11gR2 adds AutoDataPrep (ADP), text mining, perf. improvements •SQLDEV/Oracle Data Miner 3.2 “work flow” GUI launched •Integration with “R” and introduction/addition of Oracle R Enterprise •Product renamed “Oracle Advanced Analytics (ODM + ORE)You Can Think of Oracle Advanced Analytics Like This…Traditional SQL–“Human-driven” queries–Domain expertise–Any “rules” must be defined andmanagedSQL Queries–SELECT–DISTINCT–AGGREGATE–WHERE–AND OR–GROUP BY–ORDER BY–RANKSQL Statistical Functions - SQL & –Automated knowledge discovery, modelbuilding and deployment–Domain expertise to assemble the “right”data to mine/analyzeStatistical SQL “Verbs”–MEAN, STDEV–MEDIAN–SUMMARY–CORRELATE–FIT–COMPARE–ANOVA+OBIEE Oracle Database Enterprise EditionOracle Advanced Analytics Database ArchitectureMulti-lingual Component of Oracle Database —SQL, SQL Dev/ODMr GUI, ROracle Advanced Analytics - Database Option SQL Data Mining & Analytic Functions + R Integration for Scalable, Distributed, Parallel in-Database ML ExecutionSQL Developer/ODMrApplicationsR ClientData & Business AnalystsR programmersBusiness Analysts/MgrsDomain End UsersUsersPlatformOracle Database 12cVision•Big Data + Analytic Platform for the Era of Big Data and Cloud–Make Big Data + Analytics Discovery Simple•Any data size, on any computer infrastructure•Any variety of data (structured, unstructured, transactional, geospatial), in any combination–Make Big Data + Analytics Deployment Simple•As a service, as a platform, as an applicationOracle Advanced Analytics Database Option Wide Range of In-Database Data Mining and Statistical Functions•Data Understanding & Visualization–Summary & Descriptive Statistics–Histograms, scatter plots, box plots, bar charts–R graphics: 3-D plots, link plots, special R graph types–Cross tabulations–Tests for Correlations (t-test, Pearson’s, ANOVA)–Selected Base SAS equivalents•Data Selection, Preparation and Transformations–Joins, Tables, Views, Data Selection, Data Filter, SQL time windows, Multiple schemas –Sampling techniques–Re-coding, Missing values–Aggregations–Spatial data–SQL Patterns–R to SQL transparency and push down•Classification Models–Logistic Regression (GLM)–Naive Bayes–Decision Trees–Support Vector Machines (SVM)–Neural Networks (NNs)•Regression Models–Multiple Regression (GLM)–Support Vector Machines •Clustering–Hierarchical K-means–Orthogonal Partitioning–Expectation Maximization•Anomaly Detection–Special case Support Vector Machine (1-Class SVM) •Associations / Market Basket Analysis– A Priori algorithm•Feature Selection and Reduction–Attribute Importance (Minimum Description Length)–Principal Components Analysis (PCA)–Non-negative Matrix Factorization–Singular Vector Decomposition•Text Mining–Most OAA algorithms support unstructured data (i.e. customer comments, email, abstracts, etc.)•Transactional & Spatial Data–All OAA algorithms support transactional data (i.e. purchase transactions, repeated measures over time, distances from location, time spent in area A,B, C, etc.)•R packages—ability to run open source–Broad range of R CRAN packages can be run as part of database process via R to SQL transparency and/or via Embedded R modeIndependent Samples T-Test(Pooled Variances)•Query compares the mean of AMOUNT_SOLD between MEN and WOMEN within CUST_INCOME_LEVEL ranges.Returns observed t value and its related two-sided significanceSQL PlusSELECT substr(cust_income_level,1,22) income_level,avg(decode(cust_gender,'M',amount_sold,null)) sold_to_men, avg(decode(cust_gender,'F',amount_sold,null)) sold_to_women, stats_t_test_indep(cust_gender, amount_sold, 'STATISTIC','F') t_observed,stats_t_test_indep(cust_gender, amount_sold) two_sided_p_value FROM sh.customers c, sh.sales s WHERE c.cust_id=s.cust_idGROUP BY rollup(cust_income_level) ORDER BY 1;Split Lot A/B Offer testingIn-Database SQL t-test•Offer “A” to one populationand “B” to another•Over time period “t”calculate median purchaseamounts of customersreceiving offer A & B•Perform t-test to compare•If statistically significantly better results achieved from one offer over another, offer everyone higher performing offerDBMS_STAT_FUNCS PackageSUMMARY procedure•SUMMARY procedure is summarize a numerical column (ADM_PULSE); the summary is returned as record of type summaryTypeset echo offconnect CBERGER/CBERGERset serveroutput onset echo ondeclares DBMS_STAT_FUNCS.SummaryType;beginDBMS_STAT_FUNCS.SUMMARY('CBERGER','LYMPHOMA','ADM_PULSE',3,s);dbms_output.put_line('SUMMARY STATISTICS');dbms_output.put_line('Count: '||s.count);dbms_output.put_line('Min: '||s.min);dbms_output.put_line('Max: '||s.max);dbms_output.put_line('Range: '||s.range);dbms_output.put_line('Mean: '||round(s.mean));dbms_output.put_line('Mode Count: '||s.cmode.count);dbms_output.put_line('Mode: '||s.cmode(1));dbms_output.put_line('Variance: '||round(s.variance));dbms_output.put_line('Stddev: '||round(s.stddev));dbms_output.put_line('Quantile 5 '||s.quantile_5);dbms_output.put_line('Quantile 25 '||s.quantile_25);dbms_output.put_line('Median '||s.median);dbms_output.put_line('Quantile 75 '||s.quantile_75);dbms_output.put_line('Quantile 95 '||s.quantile_95);dbms_output.put_line('Extreme Count: '||s.extreme_values.count);dbms_output.put_line('Extremes: '||s.extreme_values(1));dbms_output.put_line('Top 3: '||s.top_5_values(1)||','||s.top_5_values(2)||','||s.top_5_values(3));dbms_output.put_line('Bottom 3: '||s.bottom_5_values(5)||','||s.bottom_5_values(4)||','||s.bottom_5_values(3));end;/One-Sample T-Test•Query compares the mean of SURVIVAL_TIME to the assumed value of 35: SELECT avg(SURVIVAL_TIME_MO) group_mean,stats_t_test_one(SURVIVAL_TIME_MO, 35,'STATISTIC') t_observed,stats_t_test_one(SURVIVAL_TIME_MO, 35)two_sided_p_valueFROM LYMPHOMA;•Returns the observed t value and its related two-sided significanceSQL WorksheetPaired Samples T-Test•Query compares the mean of LOGWT for Pig Weights in Week 3 to Week 8, grouped by Diet:SELECT substr(diet,1,1) as diet, avg(LOGWT3) logwt3_mean,avg(LOGWT8) logwt8_mean,stats_t_test_paired(LOGWT3, LOGWT8,'STATISTIC') t_observed,stats_t_test_paired(LOGWT3, LOGWT8) two_sided_p_valueFROM CBERGER.PIGLETS3GROUP BY ROLLUP(DIET)ORDER BY 5 ASC;•Returns the observed t value and its related two-sided significanceSQL WorksheetQuery compares the variance in the SIZE_TUMOR between MALES and FEMALES SELECT variance(decode(GENDER,'0', SIZE_TUMOR_MM, null))var_tumor_men,variance(decode(GENDER,'1', SIZE_TUMOR_MM,null)) var_tumor_women, stats_f_test(GENDER, SIZE_TUMOR_MM, 'STATISTIC', '1') f_statistic, stats_f_test(GENDER, SIZE_TUMOR_MM) two_sided_p_valueFROM DMUSER.LYMPHOMA;•Returns observed f value and two-sided significanceSQL Worksheet•Query compares the variance in the SIZE_TUMOR between males and females Grouped By GENDERSELECT GENDER,stats_one_way_anova(TREATMENT_PLAN,SIZE_REDUCTION,'F_RATIO') f_ratio,stats_one_way_anova(TREATMENT_PLAN,SIZE_REDUCTION,'SIG') p_value, AVG(SIZE_REDUCTION)FROM CBERGER.LYMPHOMAGROUP BY GENDER ORDER BY GENDER;•Returns observed f value and two-sided significanceSQL WorksheetOne-Way ANOVA•Query compares the average SIZE_REDUCTION within different TREATMENT_PLANS Grouped By LYMPH_TYPE:SELECT LYMPH_TYPE,stats_one_way_anova(TREATMENT_PLAN,SIZE_REDUCTION,'F_RATIO') f_ratio,stats_one_way_anova(TREATMENT_PLAN,SIZE_REDUCTION,'SIG') p_valueFROM DMUSER.LYMPHOMAGROUP BY LYMPH_TYPE ORDER BY 1;•Returns one-way ANOVA significance and split by LYMPH_TYPEHypothesis TestingNonparametric•Nonparametric tests are used when certain assumptions about the data are questionable.•This may include the difference between samples that are not normally distributed. •All tests involving ordinal scales (in which data is ranked) are nonparametric. •Nonparametric tests supported in Oracle Database 10g:–Binomial test–Wilcoxon Signed Ranks test–Mann-Whitney test–Kolmogorov-Smirnov testCustomer Example•"..Our experience suggests that Oracle Statistics and Data Mining features can reduce development effort of analytical systems by an order of magnitude."–Sumeet Muju, Senior Member of Professional Staff, SRA International (SRA supports NIH bioinformatics development projects)Correlation Functions•The CORR_S and CORR_K functions support nonparametric or rank correlation (finding correlations between expressions that are ordinal scaled).•Correlation coefficients take on a value ranging from –1 to 1, where:–1 indicates a perfect relationship––1 indicates a perfect inverse relationship–0 indicates no relationship•The following query determines whether there is a correlation between the AGE and WEIGHT of people, using Spearman's correlation: select CORR_S(AGE, WEIGHT)coefficient,CORR_S(AGE, WEIGHT,'TWO_SIDED_SIG')p_value, substr(TREATMENT_PLAN, 1,15) as TREATMENT_PLANfrom DMUSER.LYMPHOMAGROUP BY TREATMENT_PLAN;•Procedure to find correlation coefficients for all attributes vs. all attributesselect * from outtab order by correlation desc;DROP TABLE OUTTAB PURGE; BEGINmcorr('CUST_INSUR_LTV','OUTTAB'); END; /-- Procedure for creating a correlation table -- Parameters:-- p_in_table - name of the input data table -- p_out_table - name of the output table-- p_type - correlation type ('P' - Pearson - default -- 'S' - Spearman's rho -- 'K' - Kendall's tau-b)-- p_compact - output type (1 - compact output, triangular matrix, default -- 0 - full matrix) ---- Usage:-- 1) Uses Pearson correlation and compact output, saves results to OUTTAB -- DROP TABLE OUTTAB PURGE; -- BEGIN-- mcorr('EMP','OUTTAB'); -- END; -- /-- SELECT * FROM outtab ORDER BY col1, col2; ---- 2) Uses Spearman's rho and full matrix output, saves results to OUTTABselect * from outtab order by correlation desc;DROP TABLE OUTTAB PURGE; BEGINmcorr('CUST_INSUR_LTV','OUTTAB'); END; /-- DROP TABLE OUTTAB PURGE; -- BEGIN-- mcorr('EMP','OUTTAB','S',0); -- END; -- /-- SELECT * FROM outtab ORDER BY col1, col2; --CREATE OR REPLACE PROCEDURE mcorr(p_in_table VARCHAR2, p_out_table VARCHAR2,p_type VARCHAR2 DEFAULT 'P', p_compact NUMBER DEFAULT 1) AS TYPE Char_Tab IS TABLE OF VARCHAR2(30); v_col_names Char_Tab; v_stmt VARCHAR2(4000); v_stmt1 VARCHAR2(4000); v_corr NUMBER;v_corr_str VARCHAR2(6) := 'CORR'; BEGINIF (p_type ='S') THEN v_corr_str := 'CORR_S'; ELSEIF (p_type = 'K') THEN v_corr_str := 'CORR_K'; END IF; END IF;-- get list of columnsv_stmt := 'SELECT column_name FROM user_tab_columns ' || 'WHERE data_type = ''NUMBER'' AND ' || ' table_name = ''' || p_in_table || '''';EXECUTE IMMEDIATE v_stmt BULK COLLECT INTO v_col_names;-- create output tablev_stmt := 'CREATE TABLE ' || p_out_table ||'(col1 VARCHAR2(30), col2 VARCHAR2(30), correlation NUMBER)'; EXECUTE IMMEDIATE v_stmt;-- compute correlation and insert into output table v_stmt:='INSERT INTO ' || p_out_table ||' (col1, col2, correlation) VALUES(:v1, :v2, :v3)';FOR i IN 1..v_col_names.count LOOPEXECUTE IMMEDIATE v_stmt using v_col_names(i), v_col_names(i), 1.0; FOR j IN (i+1)..v_col_names.count LOOP v_stmt1 :='SELECT ' || v_corr_str || '(' || v_col_names(i) || ',' || v_col_names(j) || ') ' || 'FROM ' || p_in_table;EXECUTE IMMEDIATE v_stmt1 INTO v_corr;EXECUTE IMMEDIATE v_stmt using v_col_names(i), v_col_names(j), v_corr; IF (p_compact = 0) THENEXECUTE IMMEDIATE v_stmt using v_col_names(j), v_col_names(i), v_corr; END IF;END LOOP; END LOOP; END; /SHOW ERRORS;•This query analyzes the strength of the association between TREATMENT_PLAN and GENDER Grouped By LYMPH_TYPE using a cross tabulation:SELECT LYMPH_TYPE,stats_crosstab(GENDER, TREATMENT_PLAN,'CHISQ_OBS') chi_squared,stats_crosstab(GENDER, TREATMENT_PLAN,'CHISQ_SIG') p_value,stats_crosstab(GENDER, TREATMENT_PLAN,'PHI_COEFFICIENT') phi_coefficientFROM CBERGER.LYMPHOMAGROUP BY LYMPH_TYPE ORDER BY 1;•Returns the observed p_value and phi coefficient significance:•STATS_CROSSTAB function takes as arguments two expressions (the two variables being analyzed) and a value that determines which test to perform. These values include the following:–CHISQ_OBS (observed value of chi-squared)–CHISQ_SIG (significance of observed chi-squared)–CHISQ_DF (degree of freedom for chi-squared)–PHI_COEFFICIENT (phi coefficient)–CRAMERS_V (Cramer’s V statistic)–CONT_COEFFICIENT (contingency coefficient)–COHENS_K (Cohen’s kappa)•Function returns all values as specified by the third argument (default is CHISQ_SIG)PriceQuantity SoldExcerpted from Rob Rolek, BIWA TechCast presentation “Lies, Damned Lies and SQL Statistical Functions”, rolekr@Multiple Simple Linear Regression FitsExcerpted from Rob Rolek, BIWA TechCast presentation “Lies, Damned Lies and SQL Statistical Functions”, rolekr@Oracle Advanced Analytics Database Option Fastest Way to Deliver Scalable Enterprise-wide Predictive Analytics Key Features▪Scalable in-database data miningalgorithms and R integration▪Powerful predictive analytics anddeployment platform▪Drag and drop workflow, R and SQL APIs▪Data analysts, data scientists & developers▪Enables enterprise predictive analyticsapplicationsOracle Advanced Analytics•R language for interaction with the database •R-SQL Transparency Framework overloads R functions for scalable in-database execution •Function overload for data selection, manipulation and transforms•Interactive display of graphical results and flow control as in standard R•Submit user-defined R functions forexecution at database server under control of Oracle Database•15+ Powerful data mining algorithms (regression, clustering, AR, DT, etc._ •Run Oracle Data Mining SQL data mining functioning (ORE.odmSVM, ORE.odmDT, etc.) •Speak “R” but executes as proprietary in -database SQL functions —machine learning algorithms and statistical functions •Leverage database strengths: SQL parallelism, scale to large datasets, security •Access big data in Database and Hadoop via Other R packagesOracle R Enterprise (ORE) packagesR-> SQL Transparency “Push -Down”•R Engine(s) spawned by Oracle DB for database-managed parallelism •ore.groupApply high performance scoring •Efficient data transfer to spawned R engines•Emulate map-reduce style algorithms and applications •Enables production deployment and automated execution of R scripts Oracle Database 12cR-> SQL ResultsIn-Database Adv Analytical SQL FunctionsR EngineOther R packagesOracle R Enterprise packagesEmbedded R Package CalloutsRResultsHow Oracle R Enterprise Compute Engines Work123Getting startedOAA Links and Resources•Oracle Advanced Analytics Overview:–OAA presentation—Big Data Analytics in Oracle Database 12c With Oracle Advanced Analytics & Big Data SQL –Big Data Analytics with Oracle Advanced Analytics: Making Big Data and Analytics Simple white paper on OTN –Oracle Internal OAA Product Management Wiki and Workspace•YouTube recorded OAA Presentations and Demos:–Oracle Advanced Analytics and Data Mining at the YouTube Movies(6 + OAA “live” Demos on ODM’r 4.0 New Features, Retail, Fraud, Loyalty, Overview, etc.)•Getting Started:–Link to Getting Started w/ ODM blog entry–Link to New OAA/Oracle Data Mining 2-Day Instructor Led Oracle University course.–Link to OAA/Oracle Data Mining 4.0 Oracle by Examples (free) Tutorials on OTN–Take a Free Test Drive of Oracle Advanced Analytics (Oracle Data Miner GUI) on the Amazon Cloud–Link to OAA/Oracle R Enterprise (free) Tutorial Series on OTN•Additional Resources:–Oracle Advanced Analytics Option on OTN page–OAA/Oracle Data Mining on OTN page, ODM Documentation & ODM Blog–OAA/Oracle R Enterprise page on OTN page, ORE Documentation & ORE Blog–Oracle SQL based Basic Statistical functions on OTN–BIWA Summit’16, Jan 26-28, 2016– Oracle Big Data & Analytics User Conference @ Oracle HQ Conference Center•Hands-on-Labs•Customer stories, told by the customers•Educational sessions by Practitioners and Direct from Developers •Oracle Keynote presentations•Presentations covering: Advanced Analytics, Big Data, Business Intelligence, Cloud, Data Warehousing and Integration, Spatial and Graph, SQL •Networking with product management and development professionals。