Oracle SQL MAX()函数
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 聚合函数(共7个)
ORACLE 聚合函数(共7个)AVG([distinct|all]x)【功能】统计数据表选中行x列的平均值。
【参数】all表示对所有的值求平均值,distinct只对不同的值求平均值,默认为all 如果有参数distinct或all,需有空格与x(列)隔开。
【参数】x,只能为数值型字段【返回】数字值【示例】环境:create table table3(xm varchar(8),sal number(7,2));insert into table3 values('gao',1111.11);insert into table3 values('gao',1111.11); insert into table3 values('zhu',5555.55);commit;执行统计:select avg(distinct sal),avg(all sal),avg(sal) from table3;结果: 3333.33 2592.59 2592.59SUM([distinct|all]x)【功能】统计数据表选中行x列的合计值。
【参数】all表示对所有的值求合计值,distinct只对不同的值求合计值,默认为all 如果有参数distinct或all,需有空格与x(列)隔开。
【参数】x,只能为数值型字段【返回】数字值【示例】环境:create table table3(xm varchar(8),sal number(7,2));insert into table3 values('gao',1111.11);insert into table3 values('gao',1111.11);insert into table3 values('zhu',5555.55);commit;执行统计:select SUM(distinct sal),SUM(all sal),SUM(sal) from table3;结果: 6666.66 7777.77 7777.77STDDEV([distinct|all]x)【功能】统计数据表选中行x列的标准误差。
oralce函数
oralce函数Oracle是一种关系数据库管理系统,它使用了一种名为Oracle数据库的数据库管理系统。
Oracle是一种强大的工具,提供了许多内置函数,可以用于在数据库中进行各种操作。
以下是一些常用的Oracle函数。
1.聚合函数-AVG:计算指定列的平均值。
-COUNT:计算指定列中非空数据的数量。
-SUM:计算指定列的总和。
-MAX:找到指定列的最大值。
-MIN:找到指定列的最小值。
2.字符串函数-CONCAT:将两个字符串连接成一个字符串。
-LOWER:将字符串转换为小写。
-UPPER:将字符串转换为大写。
-LENGTH:计算字符串的长度。
-SUBSTR:返回一个字符串的子字符串。
3.数值函数-ROUND:将一个数值四舍五入到指定的小数位数。
-CEIL:向上取整,返回不小于指定数值的最小整数。
-FLOOR:向下取整,返回不大于指定数值的最大整数。
-ABS:返回指定数值的绝对值。
-MOD:返回两个数值的余数。
4.日期和时间函数-SYSDATE:返回当前日期和时间。
-ADD_MONTHS:在指定日期上增加指定的月份。
-TRUNC:截断日期或时间到指定的精度。
-MONTHS_BETWEEN:计算两个日期之间的月数差。
-TO_CHAR:将日期转换为指定格式的字符串。
5.条件函数-DECODE:根据条件返回不同的值。
-CASE:根据条件执行不同的操作。
-NVL:如果给定的表达式为NULL,则将其替换为指定的值。
-NULLIF:如果两个表达式的值相等,则返回NULL。
6.分析函数-ROW_NUMBER:为每一行分配一个唯一的数字。
-RANK:为每一行分配一个排名,如果有并列的值,则排名相同。
-DENSE_RANK:为每一行分配一个排名,如果有并列的值,则排名可以重复。
-LEAD:返回指定行后的值。
-LAG:返回指定行前的值。
上述函数只是Oracle提供的一小部分功能,Oracle还提供了许多其他有用的函数。
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 sql 字段 运算
oracle sql 字段运算Oracle SQL字段运算是在查询数据时对字段进行数学运算、逻辑运算或字符串操作等操作的过程。
本文将从不同的角度介绍Oracle SQL字段运算的相关内容。
一、数学运算在Oracle SQL中,可以对字段进行各种数学运算,包括加减乘除、取余、取整等操作。
例如,可以使用加法运算符(+)将两个字段相加,使用乘法运算符(*)将两个字段相乘。
这些运算可以对数字类型的字段进行,以实现数据的计算和统计。
二、逻辑运算逻辑运算是指根据逻辑关系对字段进行比较和判断的操作。
在Oracle SQL中,可以使用等于(=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等比较运算符对字段进行比较。
此外,还可以使用逻辑运算符(AND、OR、NOT)对多个条件进行组合,实现复杂的逻辑判断。
三、字符串操作字符串操作是指对字段中的字符数据进行处理和操作的过程。
在Oracle SQL中,可以使用字符串连接运算符(||)将多个字符串拼接成一个字符串。
同时,还可以使用字符串函数对字段进行处理,如将字段转换为大写(UPPER)、小写(LOWER)、截取子串(SUBSTR)等。
四、日期运算日期运算是指对日期类型的字段进行处理和计算的操作。
在Oracle SQL中,可以使用加减法运算符对日期进行加减操作。
例如,可以使用加法运算符(+)将一个日期字段加上一定的天数,得到新的日期。
此外,还可以使用日期函数对日期字段进行处理,如获取年份(EXTRACT YEAR)、获取月份(EXTRACT MONTH)等。
五、聚合运算聚合运算是指对字段进行汇总和统计的操作。
在Oracle SQL中,可以使用聚合函数对字段进行计算,如求和(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)等。
通过聚合运算,可以对字段进行汇总和统计,得到统计结果。
六、条件运算条件运算是指根据条件对字段进行选择和过滤的操作。
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));语句已处理。
SQL窗口函数之聚合窗口函数的使用(count,max,min,sum)
SQL窗⼝函数之聚合窗⼝函数的使⽤(count,max,min,sum)⽬录案例分析1.移动平均值2.累计求和(ROW)3.累计求和(RANGE)⽰例表和脚本关于窗⼝函数的基础,请看⽂章许多常见的聚合函数也可以作为窗⼝函数使⽤,包括AVG()、SUM()、COUNT()、MAX()以及MIN()等函数。
案例分析案例使⽤的⽰例表下⾯的查询中会⽤到两个表,其中sales_monthly表中存储了不同产品(苹果、⾹蕉、橘⼦)每个⽉的销售额情况。
以下是该表中的部分数据:transfer_log表中记录了⼀些银⾏账户的交易⽇志。
以下是该表中的部分数据:该表中的字段分别表⽰交易⽇志编号、交易时间、交易发起账户、交易接收账户、交易类型以及交易⾦额。
这两个表的初始化脚本可以在⽂章底部获取。
1.移动平均值AVG函数在作为窗⼝函数使⽤时,可以⽤于计算随着当前⾏移动的窗⼝内数据⾏的平均值。
例如,以下语句⽤于查找不同产品每个⽉以及截⾄当前⽉最近3个⽉的平均销售额1 2 3 4 5 6 7SELECT m.product,m.ym,m.amount,AVG(m.amount) OVER(PARTITION BY m.productORDER BY m.ymROWS BETWEEN2 PRECEDING AND CURRENT ROW )FROM sales_monthly mORDER BY m.product,m.ymAVG函数OVER⼦句中的PARTITION BY选项表⽰按照产品进⾏分区。
ORDER BY选项表⽰按照⽉份进⾏排序;ROWS BETWEEN 2 PRECEDING AND CURRENT ROW表⽰窗⼝从当前⾏的前2⾏开始,直到当前⾏结束。
该查询返回的结果如下:对于“橘⼦”:第⼀个⽉的分析窗⼝只有1⾏数据,因此平均销售额为“10154”。
第⼆个⽉的分析窗⼝为第1⾏和第2⾏数据,因此平均销售额为“10168.5”((10154+10183)/2)。
oracle最全函数大全(分析函数-聚合函数-转换函数-日期型函数-字符型函数-数值型函数-其他函数)
oracle函数大全(分析函数,聚合函数,转换函数,日期型函数,字符型函数,数值型函数,其他函数)oracle函数大全 (1)oracle分析函数--SQL*PLUS环境 (1)oracle 10g函数大全--聚合函数 (19)oracle 10g函数大全--转换函数 (23)oracle 10g函数大全--日期型函数 (40)oracle 10g函数大全--字符型函数 (45)oracle 10g函数大全--数值型函数 (55)oracle 10g函数大全--其他函数 (58)oracle分析函数--SQL*PLUS环境一、总体介绍1.1.分析函数如何工作语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 <ASC DESC> <NULLS FIRST NULLS LAST>> <WINDOWING子句>) PARTITION子句ORDER BY子句 WINDOWING子句缺省时相当于RANGE UNBOUNDED PRECEDING1. 值域窗(RANGE WINDOW)RANGE N PRECEDING 仅对数值或日期类型有效,选定窗为排序后当前行之前,某列(即排序列)值大于/小于(当前行该列值–/+ N)的所有行,因此与ORDER BY子句有关系。
2. 行窗(ROW WINDOW)ROWS N PRECEDING 选定窗为当前行及之前N行。
还可以加上BETWEEN AND 形式,例如RANGE BETWEEN m PRECEDING AND n FOLLOWING 函数 AVG(<distinct all> eXPr)一组或选定窗中表达式的平均值 CORR(expr, expr) 即COVAR_POP(exp1,exp2) / (STDDEV_POP(expr1) * STDDEV_POP(expr2)),两个表达式的互相关,-1(反相关) ~1(正相关),0表示不相关COUNT(<distinct> <*> <expr>) 计数COVAR_POP(expr, expr) 总体协方差COVAR_SAMP(expr, expr) 样本协方差CUME_DIST 累积分布,即行在组中的相对位置,返回0 ~ 1DENSE_RANK 行的相对排序(与ORDER BY搭配),相同的值具有一样的序数(NULL计为相同),并不留空序数FIRST_VALUE 一个组的第一个值LAG(expr, <offset>, <default>) 访问之前的行,OFFSET是缺省为1 的正数,表示相对行数,DEFAULT是当超出选定窗范围时的返回值(如第一行不存在之前行)LAST_VALUE 一个组的最后一个值LEAD(expr, <offset>, <default>) 访问之后的行,OFFSET是缺省为1 的正数,表示相对行数,DEFAULT是当超出选定窗范围时的返回值(如最后行不存在之前行)MAX(expr) 最大值MIN(expr) 最小值NTILE(expr) 按表达式的值和行在组中的位置编号,如表达式为4,则组分4份,分别为1 ~ 4的值,而不能等分则多出的部分在值最小的那组PERCENT_RANK 类似CUME_DIST,1/(行的序数 - 1)RANK 相对序数,答应并列,并空出随后序号RATIO_TO_REPORT(expr) 表达式值 / SUM(表达式值)ROW_NUMBER 排序的组中行的偏移STDDEV(expr) 标准差STDDEV_POP(expr) 总体标准差STDDEV_SAMP(expr) 样本标准差SUM(expr) 合计VAR_POP(expr) 总体方差VAR_SAMP(expr) 样本方差VARIANCE(expr) 方差REGR_ xxxx(expr, expr) 线性回归函数REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2) REGR_INTERCEPT:返回回归线的y截距,等于AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)REGR_COUNT:返回用于填充回归线的非空数字对的数目REGR_R2:返回回归线的决定系数,计算式为:If VAR_POP(expr2) = 0 then return NULLIf VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1If VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0 thenreturn POWER(CORR(expr1,expr),2)REGR_AVGX:计算回归线的自变量(expr2)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr2)REGR_AVGY:计算回归线的应变量(expr1)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr1)REGR_SXX:返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr2)REGR_SYY:返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr1)REGR_SXY: 返回值等于REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2) 首先:创建表及接入测试数据。
oracle常用的SQL及语法
1、两个oracle 开发工具介绍a)SqlDbx王金生曾推荐过的一款数据库客户端开发工具,使用容易,不需要额外的安装其它插件,有sql提示功能,支持Oracle,Sybase ASE, IBM,DB2/UDB, MicrosoftSQL Server 和ODBC数据源,免费绿色版。
b)PLSQL Developer专门针对oracle开发的一款比较专业的客户端工具,除了常用的数据库操作外,还支持存储过程及函数的调试功能等比较高级的功能,详细的操作可以安装完毕后大家去慢慢研究。
配置方式见网上找的一段方法,第二种:/view/65b5a80f6c85ec3a87c2c583.html以上提到的工具及可能用到的插件见共享目录中的文件。
2、oracle 与 sqlserver 语法大比较a)oracle各类型字段描述b)字段类型比较c)常用函数比较注:此处仅记录语法有区别的地方,更多丰富的语法请查看附件中的手册。
以下的exp为expression的缩写d)关于脏读目前我们使用的sqlserver 数据库,在查询数据时,都要求在select语句中后面跟一个(nolock)或(with nolock)来保证读取大表时不影响其它程序进程的数据操作。
在oracle中,目前还不允许脏读的方式,在每次select 后,读到的数据都是已经commit的数据,所以为了避免读取数据的不准确,程序中如果有比较耗时的sql 操作,尤其是在insert 和update后,尽量减小事务,而且要在事务结束后及时commit。
e)表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX)在创建表及其主键、外键、CHECK、UNIQUE、DEFAULT、INDEX时,SQL SERVER 与ORACLE的语法大致相同。
主要区别如下:Oracle定义表字段的default属性紧跟字段类型之后,如下:Create table MZ_Ghxx( ghlxh number primay key ,rq date default sysdate not null,….)而不能写成Create table MZ_Ghxx( ghlxh number primay key ,rq date not null default sysdate,….)f)存储过程/函数结构的不同SQLSERVER中存储过程的结构大致如下CREATE PROCEDURE procedure_name/*输入、输出参数的声明部分*/ASDECLARE/*局部变量的声明部分*/BEGIN/*主体SQL语句部分*//*游标声明、使用语句在此部分*/ENDORACLE中存储过程的结构大致如下CREATE OR REPLACE PROCEDURE procedure_name(/*输入、输出参数的声明部分*/ )AS/*局部变量、游标等的声明部分*/BEGIN/*主体SQL语句部分*//*游标使用语句在此部分*/EXCEPTION/*异常处理部分*/END ;ORACLE端FUNCTION语法说明CREATE [OR REPLACE] FUNCTION function_name[(argument [{IN | OUT | IN OUT }] ) type,…[(argument [{IN | OUT | IN OUT }] ) typeRETURN return_type {IS | AS}BEGIN…END;变量赋值在SQL SERVER语句中用如下语句对局部变量赋值(初始值或数据库表的字段值或表达式):“SELECT 局部变量名= 所赋值(初始值或数据库表的字段值或表达式)”;而在ORACLE中,将初始值赋给局部变量时,用如下语句:“局部变量名: = 所赋值(初始值或表达式);”,将检索出的字段值赋给局部变量时,用如下语句:“SELECT 数据库表的字段值INTO 局部变量名…”。
oracle sql大小比较写法
标题:Oracle SQL中的大小比较写法在Oracle数据库中,大小比较是我们经常会用到的操作之一。
在SQL 语句中,我们需要通过大小比较来筛选出符合条件的数据。
本文将详细介绍Oracle SQL中大小比较的写法,包括基本的比较操作符、使用函数进行比较以及一些实际应用场景中的大小比较技巧。
一、基本的比较操作符在Oracle SQL中,可以使用一些基本的比较操作符来进行大小比较,这些操作符包括:1. 大于(>):用于比较左操作数是否大于右操作数。
2. 小于(<):用于比较左操作数是否小于右操作数。
3. 大于等于(>=):用于比较左操作数是否大于或等于右操作数。
4. 小于等于(<=):用于比较左操作数是否小于或等于右操作数。
5. 等于(=):用于比较左操作数是否等于右操作数。
6. 不等于(<>):用于比较左操作数是否不等于右操作数。
下面是一些使用基本比较操作符的例子:```-- 查询员工工资大于5000的数据SELECT * FROM employees WHERE salary > 5000;-- 查询订单金额小于等于100的数据SELECT * FROM orders WHERE amount <= 100;```二、使用函数进行大小比较除了基本的比较操作符外,Oracle SQL还提供了一些函数来进行大小比较,这些函数包括:1. MAX():用于获取指定表达式的最大值。
2. MIN():用于获取指定表达式的最小值。
3. GREATEST():用于获取指定值中的最大值。
4. LEAST():用于获取指定值中的最小值。
下面是一些使用函数进行大小比较的例子:```-- 查询员工表中工资的最大值SELECT MAX(salary) FROM employees;-- 查询员工表中芳龄最小的员工SELECT * FROM employees WHERE age = (SELECT MIN(age) FROM employees);```三、实际应用场景中的大小比较技巧在实际的数据库应用中,我们还可以通过一些技巧来进行大小比较,以满足不同的需求。
oracle的sql语句
oracle的sql语句Oracle的SQL语句可以用于查询、插入、更新和删除数据库中的数据。
以下是一些常见的Oracle SQL语句示例:1. 查询数据:- 查询所有记录:SELECT * FROM 表名;- 查询指定列:SELECT 列名1, 列名2 FROM 表名;- 带条件查询:SELECT * FROM 表名 WHERE 条件;- 排序查询:SELECT * FROM 表名 ORDER BY 列名ASC/DESC;- 分组查询:SELECT 列名, COUNT(*) FROM 表名GROUP BY 列名;2. 插入数据:- 插入单条记录:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2);- 插入多条记录:INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2), (值3, 值4), ...;3. 更新数据:- 更新单个字段:UPDATE 表名 SET 列名 = 新值WHERE 条件;- 更新多个字段:UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2 WHERE 条件;4. 删除数据:- 删除所有记录:DELETE FROM 表名;- 删除满足条件的记录:DELETE FROM 表名 WHERE 条件;5. 聚合函数:- 计算总数:SELECT COUNT(*) FROM 表名;- 计算平均值:SELECT AVG(列名) FROM 表名;- 计算最大值:SELECT MAX(列名) FROM 表名;- 计算最小值:SELECT MIN(列名) FROM 表名;- 计算求和:SELECT SUM(列名) FROM 表名;这些只是一些常见的Oracle SQL语句示例,实际使用中还可以结合其他语句和函数进行更复杂的查询和操作。
oracle内置取最大最小函数:greatest和least
oracle 内置取最大最小函数:greatest 和leastoracle 中取最大值最小值一般想到的就是组函数max 和min ,这也是我的第一想法,但是别忘了,max 和min 是用来取某个字段的最大最小值,并不是说如果你有几个数,然后你直接从它们中取出最大或者最小,由于我不知道greatest 和least 这两个函数,最后我实现的是通过case 去比较的,如果A 大于B 就取A ,否则取B ,现在就可以直接用greatest(A, B)来实现了。
1、coalescue返回表达式列表中第一个非空的值,列表必须都是相同类型,也可以是一个表的同一行、不同列的值进行比较。
1 2 3 4 5 6 7 8 9 10 11 SELECT coalesce(1,NULL,2)FROM dual; -- 返回1SELECT coalesce(NULL,2,1)FROM dual; -- 返回2SELECT coalesce(t.empno,t.mgr)FROM scott.emp t; -- 效果类似 NVL( t.empno, t.mgr )2、greatest返回表达式列表中最大值,列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。
当列表中有一个值为null ,那么就返回null ,这个地方需要注意,如果需要当值为null 的时候,可以考虑用nvl 转为0来进行比较。
1 2 3 4 5 6 7 8 9 10 SELECT greatest(1,3,2) FROM dual; -- 返回3SELECT greatest('A','B','C') FROM dual; -- 返回CSELECT greatest(NULL,'B',11 12 13 14 15 'C')FROM dual; -- 返回nullSELECT greatest(t.empno,t.mgr)FROM scott.emp t; -- 返回empno 和mgr 较大值3、least返回表达式列表中最小值,列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。
oracle基础SQL语句多表查询子查询分页查询合并查询分组查询groupbyhaving。。。
oracle基础SQL语句多表查询⼦查询分页查询合并查询分组查询groupbyhaving。
select语句学习. 创建表create table user(user varchar2(20), id int);. 查看执⾏某条命令花费的时间set timing on;. 查看表的结构desc 表名;. 查询所有列select * from 表名;. 查询指定列select 某列名1,某列名2 from 表名;. 取消重复⾏select distinct 某列名1,某列名2 from 表名;其中distinct作⽤在后⾯多列,只有每⾏完全相同才会被滤去. 给某列或者某个表取别名select 某列名 as 其他名 from 表名 as 其他名;. 如何处理null值nvl函数的使⽤:select nvl(某列名,0) from 表名当此列为null时将值置为0. 对时间类型的数据的处理select 某列1,某列2 from 表名 where 列名='1-1⽉-1982';oracle默认的时间格式如上like%表⽰0到多个字符_表⽰单个字符select 某列名 from 表名 where 列名 like G%;返回⾸字母为G的列inselect 某列名 from 表名 where 列名 in(条件a,条件b,条件c);等同于 select 某列名 from 表名 where 列名 = 条件a,列名 = 条件b,列名 = 条件c;null的处理select 某列名 from 表名 where 列名 is null;不是⽤等号也不能将null写成''order byselect 某列名 from 表名 order by 列名 asc;从低到⾼asc可省略select 某列名 from 表名 order by 列名 desc;从⾼到低select 某列名 from 表名 order by 列名1 asc,列名2 desc;其中列1和列2之间的逻辑要正确select 某列名*2 as 别名 from 表名 order by 表名 asc;使⽤别名排序达到⼀个很好的效果max分组函数:在没有使⽤order by的时候select后要么全是分组函数,要么就是没有分组函数select max(列名) from emp;select 列名1 from 表名 where 列名2=(select max(列名2) from 表名);select 列名1, max(列名2) from 表名;错误,min avg sum count 使⽤类似group by 和 having的使⽤group by⽤于对查询的结果进⾏分组统计having ⽤于限制分组显⽰的结果select avg(列名),max(列名) ,列名x from 表名 group by 列名x;select avg(列名),max(列名) ,列名x,列名y from 表名 group by 列名x,列名y;先按列名x分组再按列名y分组select avg(列名),max(列名) ,列名x from 表名 group by 列名x having avg(列名)>2000;显⽰ >2000 的组1 分组函数只能出现选择列表、having、order by⼦句中2 如果在select语句中同时包含有group by ,having,order by那么他们的顺序是group by ,having,orderby3 在选择列中如果有列、表达式、和分组函数,那么这些列和表达式必须有⼀个出现在group by⼦句中,否则会出错select 列名1,avg(列名2),max(列名3) from 表名 group by 列名1 having avg(列名2)<2000;其中列名1就⼀定要出现在group by 中多表查询将表取个别名就⾏了对多张表多表查询:使⽤select时:第⼀步:select ?,?,? from talbe1 a1,table2 a2 where a1.x between a2.x and a2.y;第⼀步:select a1.x,a2.y,a1.z from talbe1 a1,table2 a2 where a1.x between a2.x and a2.y;实现的功能是:显⽰表1的x、表2的y、表1的z,条件是表1的x在表2的x和y之间;对⼀张表进⾏“多表查询”(⾃连接):将⼀张表取多个别名进⾏操作:select ?,?,? from talbe1 a1,table1 a2 where a1.x between a2.x and a2.y;数据库在执⾏每个⼦句sql是从左到右执⾏的,⼦句与⼦句先执⾏后⾯的。
sql server max用法
sql server max用法SQL Server是一种常用的关系型数据库管理系统,其提供了一系列强大的功能和语法来处理和管理数据。
其中,MAX函数是SQL Server中的一个聚合函数,用于返回一个列的最大值。
本文将深入探讨MAX函数的用法和相关知识,以帮助读者更好地理解和使用这个功能。
首先,我们来了解一下MAX函数的语法。
MAX函数的一般语法如下:SELECT MAX(column_name)FROM table_name;其中,column_name是要求最大值的列的名称,而table_name则是要查询的数据表的名称。
MAX函数会在指定的列中找到最大值,并将其返回。
下面我们将从几个方面详细介绍MAX函数的使用方法。
1. MAX函数作为聚合函数的用法在SQL Server中,MAX函数通常用作聚合函数,即对一组数据进行统计并返回一个结果。
在这种情况下,MAX函数会对指定的列进行计算,并返回这一列中的最大值。
在使用MAX函数作为聚合函数时,需要结合GROUP BY语句来对数据进行分类和分组。
例如,我们想要统计每个部门的最高工资,可以使用以下语句:SELECT department, MAX(salary)FROM employeesGROUP BY department;这个语句会返回每个部门的最高工资。
2. MAX函数与其他函数的联合使用MAX函数可以与其他函数联合使用,以修改或增强查询结果。
例如,我们可以使用MAX函数和COUNT函数联合使用,以返回某一列中的最大值和该列的记录数。
以下是一个示例查询:SELECT MAX(salary), COUNT(*)FROM employees;这个查询会返回员工表中薪水的最大值以及员工总数。
3. MAX函数与WHERE子句的结合当我们希望返回满足某一条件的最大值时,可以将MAX函数与WHERE 子句结合使用。
例如,我们想要找到年龄大于25岁的员工中最高的工资,可以使用以下查询语句:SELECT MAX(salary)FROM employeesWHERE age > 25;这个语句会返回年龄大于25岁的员工中的最高工资。
sql语句join中max用法
sql语句join中max用法SQL中的JOIN操作是非常常见和重要的操作,它用于将多张表中的数据按照某种关联条件进行连接,从而实现数据的查询和分析。
在JOIN操作中,使用MAX函数是一种常见的需求,它可以帮助我们获取某个表中的最大值。
本文将介绍JOIN中MAX函数的用法。
在进行JOIN操作时,我们通常会有两张或更多张表需要连接。
假设我们有两个表:`orders`和`products`,它们的结构如下:```orders表:order_id | customer_id | order_date---------+-------------+-----------1 | 1 | 2020-01-012 | 1 | 2020-02-013 | 2 | 2020-03-01products表:product_id | product_name | price-----------+--------------+------1 | A | 102 | B | 203 | C | 30```我们现在的需求是,获取每个顾客(customer_id)最新的订单(order_date)的产品信息(product_name)和价格(price)。
为了实现这个需求,我们可以使用JOIN操作和MAX函数进行如下的SQL查询:```sqlSELECT o.customer_id, p.product_name, p.priceFROM orders oJOIN products p ON o.order_id = p.product_idWHERE (o.customer_id, o.order_date) IN (SELECT customer_id, MAX(order_date)FROM ordersGROUP BY customer_id)```这个查询语句的逻辑如下:1. 在内层的子查询中,我们使用了MAX函数来获取每个顾客的最新订单日期。
oraclemax()函数和min()函数
oraclemax()函数和min()函数当需要了解⼀列中的最⼤值时,可以使⽤MAX()函数;同样,当需要了解⼀列中的最⼩值时,可以使⽤MIN()函数。
语法如下。
SELECT MAX (column_name) / MIN (column_name)FROM table_name说明:列column_name中的数据可以是数值、字符串或是⽇期时间数据类型。
MAX()/MIN()函数将返回与被传递的列同⼀数据类型的单⼀值。
实例7 MAX()函数的使⽤查询TEACHER表中教师的最⼤年龄。
实例代码:SELECT MAX (AGE) AS MAXAGEFROM TEACHER运⾏结果如图1⽰。
图1TEACHER表中教师的最⼤年龄然⽽,在实际应⽤中得到这个结果并不是特别有⽤,因为经常想要获得的信息是具有最⼤年龄的教师的教⼯号、姓名、性别等信息。
然⽽SQL不⽀持如下的SELECT语句。
SELECT TNAME, DNAME, TSEX, MAX (AGE)FROM TEACHER因为聚合函数处理的是数据组,在本例中,MAX函数将整个TEACHER表看成⼀组,⽽TNAME、DNAME和TSEX的数据都没有进⾏任何分组,因此SELECT语句没有逻辑意义。
同样的道理,下⾯的代码也是⽆效的。
SELECT TNAME, DNAME, TSEX,SAL ,AGEFROM TEACHERWHERE AGE=MAX (AGE)解决这个问题的⽅法,就是在WHERE⼦句中使⽤⼦查询来返回最⼤值,然后再基于这个返回的最⼤值,查询相关信息。
实例8 在WHERE⼦句中使⽤⼦查询返回最⼤值查询TEACHER表中年纪最⼤的教师的教⼯号、姓名、性别等信息。
实例代码:SELECT TNAME, DNAME, TSEX, SAL, AGEFROM TEACHERWHERE AGE=(SELECT MAX (AGE) FROM TEACHER)运⾏结果如图2⽰。
OracleMax函数使用中出现的问题
SELECT T_RECORDING WHERE ID ='100010010102'
按理说,根据这个条件查询的结果应该为sqlcode=1403 ,但是奇怪的是如下sql异常却捕获不到: 复制代码 代码如下:
EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN ERR_CODE :=-2000; ERR_MSG :=SQLERRM; RETURN ;
执行的时候不返回任何错误通过执行查看vredate值发现值为空那么既然值为空则也应该报sqlcode1405的异常呀但是oracle执行引擎未报任何错这个情况到底是个什么问题呢今天先记下这个情况以后再研究
OracleMax函 数 使 用 中 出 现 的 问 题
再写一个存储过程时, 用到了如下sql语句 复制代码 代码如下:
SQLMAX()函数处理字符型字段
SQLMAX()函数处理字符型字段假设有数据库表student,表中有字段studentCode,它是字符型的,现有需求:“每次向student表插⼊数据时,⾃动⽣成studentCode字段的值”如果你的实现思路是这样的:if(student表为空){待插⼊数据studentCode字段的值设置为1;}else{查询出表中studentCode字段的最⼤值max;待插⼊数据studentCode字段的值设置为max+1;}将数据插⼊student表;你可能使⽤以下SQL语句查询studentCode字段的最⼤值:SELECT MAX(studentCode) FROM `student`测试⼀下程序,试着插⼊⼏条数据:1插⼊第1条数据:studentCode ==12插⼊第2条数据:studentCode ==23插⼊第3条数据:studentCode ==34插⼊第4条数据:studentCode ==45插⼊第5条数据:studentCode ==56插⼊第6条数据:studentCode ==67插⼊第7条数据:studentCode ==78插⼊第8条数据:studentCode ==89插⼊第9条数据:studentCode ==910插⼊第10条数据:studentCode ==1011插⼊第11条数据:studentCode ==1012插⼊第12条数据:studentCode ==1013插⼊第13条数据:studentCode ==10最开始插⼊前10条数据studentCode字段的值还是正常的,可是从第11条数据开始,为什么studentCode字段的值全不变了呢?原因就是studentCode字段是字符型的,从指定第11条数据的插⼊操作开始,SELECT MAX(studentCode) FROM `student`的结果将永远是9,所以就导致了最终设置的studentCode的值永远是10.解决办法:类型转换1SELECT MAX(CONVERT(studentCode,INT)) FROM `student`。
【Oracle】oracle取最大值和最小值的几个方法汇总
【Oracle】oracle取最⼤值和最⼩值的⼏个⽅法汇总(1)oracle使⽤keep分析函数取最值记录-- 取⼯资sal最⼤的雇员姓名及其⼯资,以及⼯资sal最少的雇员姓名及其⼯资selectdeptno,empno,ename,sal,max(ename) keep(dense_rank FIRST order by sal) over (partition by deptno) as min_sal_man,max(sal) keep(dense_rank FIRST order by sal) over (partition by deptno) as min_sal,max(ename) keep(dense_rank LAST order by sal) over (partition by deptno) as max_sal_man,max(sal) keep(dense_rank LAST order by sal) over (partition by deptno) as max_salfrom empwhere deptno=10结果如下:从语句中可以看到,ename和sal都是⽤的max(),这样做的⽬的是为了去除由于keep()函数得到的有重复值的数据结果集。
这样⽤有⼀个弊端,加⼊部门20有两个相同的最⼤SAL的⼈,部门30有两个相同的最⼩SAL的⼈,如果按照这种⽅法取出来的数据,就不⼀定准确了,重复的⼈会被去除掉。
我们⽤下⾯的语句来修改⼀下:selectdeptno,empno,ename,sal,max(ename) keep(dense_rank FIRST order by sal) over (partition by deptno) as min_sal_man,max(sal) keep(dense_rank FIRST order by sal) over (partition by deptno) as min_sal,max(ename) keep(dense_rank LAST order by sal) over (partition by deptno) as max_sal_man,max(sal) keep(dense_rank LAST order by sal) over (partition by deptno) as max_sal,wmsys.wm_concat(ename) keep(dense_rank LAST order by sal) over (partition by deptno) as⼯资最⾼的⼈,wmsys.wm_concat(ename) keep(dense_rank FIRST order by sal) over (partition by deptno) as⼯资最低的⼈from empwhere deptno=20order by1, 2 ;我们新增了两个列:⼯资最⾼的⼈,⼯资最低的⼈。