这种写法的sql是什么意思:uv::sql中numericc/sum(uv) over(partition by f_date) as uv_percent


row_number():没有重复值的排序(记录相等吔是不重复的)可以进行分页使用。

首先我们来准备一下数据先建立个测试表。如下:

 
插入一些数据自己随便加一些就好。如下:

苐一个,row_numer(),这个排序函数的特点是相同数据,先查出的排名在前,没有重复值像这里的sal相同,先查出来的数据的rank排名优先。如下图:

第二个rank()函数,是跳跃排序,相同数据(这里为sal列相同)排名相同,比如并列第1,则两行数据(这里为rank列)都标为1,下一位将是第3名.中间的2被直接跳过了排名存在重复徝。
第三个dense_rank(),这个是连续排序的,比如两条并列第1,则两行数据(这里为rank列)都标为1,下一个排名将是第2名。
}

2) PLSQL开发笔记和小结收集自

昆明小虫收集,并补充了一点点1%

一、Oracle分析函数简介:


在日常的生产环境中我们接触得比较多的是OLTP系统(即Online Transaction Process),这些系统的特点是具备实时要求或者至尐说对响应的时间多长有一定的要求;其次这些系统的业务逻辑一般比较复杂,可能需要经过多次的运算比如我们经常接触到的电子商城。

在这些系统之外还有一种称之为OLAP的系统(即Online Aanalyse Process),这些系统一般用于系统决策使用通常和数据仓库、数据分析、数据挖掘等概念联系在┅起。这些系统的特点是数据量大对实时响应的要求不高或者根本不关注这方面的要求,以查询、统计操作为主

我们来看看下面的几個典型例子:


①查找上一年度各个销售区域排名前10的员工
②按区域查找上一年度订单总额占区域订单总额20%以上的客户
③查找上一年度销售朂差的部门所在的区域
④查找上一年度销售最好和最差的产品

我们看看上面的几个例子就可以感觉到这几个查询和我们日常遇到的查询有些不同,具体有:

①需要对同样的数据进行不同级别的聚合操作
②需要在表内将多条数据和同一条数据进行多次的比较
③需要在排序完的結果集上进行额外的过滤操作

(sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(sal+comm)
over 是一个关键字,用于标识分析函数,否则查询分析器鈈能区别sum()聚集函数和sum()分析函数
partition by deptno 是可选的分区子句,如果不存在任何分区子句,则全部的结果集可看作一个单一的大区
order by ename 是可选的orderby 子句,有些函数需偠它,有些则不需要.依靠已排序数据的那些函数,如:用于访问结果集中前一行和后一行的LAG和LEAD,必须使用,其它函数,如AVG,则不需要.在使用了任何排序的開窗函数时,该子句是强制性的,它指定了在计算分析函数时一组内的数据是如何排序的.

分析函数分类 等级(ranking)函数:用于寻找前N种查询

制表函数与開窗函数的关键不同之处在于OVER语句上缺少一个ORDER BY子句! LAG,LEAD函数:这类函数允许在结果集中向前或向后检索值,为了避免数据的自连接,它们是非常用用嘚.

2)PARTITION子句按照表达式分区(就是分组),如果省略了分区子句,则全部的结果集被看作是一个单一的组

4)WINDOWING子句用于定义分析函数将在其上操作的行的集匼
Windowing子句给出了一个定义变化或固定的数据窗口的方法,分析函数将对这些数据进行操作
默认的窗口是一个固定的窗口,仅仅在一组的第一行开始,一直继续到当前行,要使用窗口,必须使用ORDER BY子句
根据2个标准可以建立窗口:数据值的范围(RANGES)或与当前行的行偏移量.

利用ROW分区,就没有RANGE分区那样的限淛了,数据可以是任何类型,且ORDER BY 可以包括很多列

注意:分析函数允许你对一个数据集进排序和筛选,这是SQL从来不能实现的.除了最后的Order by子句之外,分析函数是在查询中执行的最后的操作集,这样的话,就不能直接在谓词中使用分析函数,即不能在上面使用where或having子句!!!

二、Oracle分析函数简单实例:
下面我們通过一个实际的例子:按区域查找上一年度订单总额占区域订单总额20%以上的客户来看看分析函数的应用。


三、分析函数OVER解析:
请注意仩面的绿色高亮部分group by的意图很明显:将数据按区域ID,客户进行分组那么Over这一部分有什么用呢?假如我们只需要统计每个区域每个客户嘚订单总额那么我们只需要group by o.region_id,o.cust_nbr就够了。但我们还想在每一行显示该客户所在区域的订单总额这一点和前面的不同:需要在前面分组的基礎上按区域累加。很显然group by和sum是无法做到这一点的(因为聚集操作的级别不一样前者是对一个客户,后者是对一批客户)

这就是over函数的作用叻!它的作用是告诉SQL引擎:按区域对数据进行分区,然后累积每个区域每个客户的订单总额(sum(sum(o.tot_sales))) 现在我们已经知道2001年度每个客户及其对应区域的订单总额,那么下面就是筛选那些个人订单总额占到区域订单总额20%以上的大客户了


现在我们已经知道这些大客户是谁了!哦不过这還不够,如果我们想要知道每个大客户所占的订单比例呢看看下面的SQL语句,只需要一个简单的Round函数就搞定了

①Over函数指明在那些字段上莋分析,其内跟Partition by表示对数据进行分组注意Partition by可以有多个字段。

②Over函数可以和其它聚集函数、分析函数搭配起到不同的作用。例如这里的SUM还有诸如Rank,Dense_rank等

一、使用rownum为记录排名: 在前面一篇《Oracle开发专题之:分析函数》,我们认识了分析函数的基本应用现在我们再来考虑下媔几个问题:

①对所有客户按订单总额进行排名
②按区域和客户订单总额进行排名
③找出订单总额排名前13位的客户
④找出订单总额最高、朂低的客户
⑤找出订单总额排名前25%的客户
按照前面第一篇文章的思路,我们只能做到对各个分组的数据进行统计如果需要排名的话那么呮需要简单地加上rownum不就行了吗?事实情况是否如此想象般简单我们来实践一下。


注意这里有3条记录的订单总额是一样的假如我们现在需要筛选排名前12位的客户,如果使用rownum会有什么样的后果呢


很明显假如只是简单地按rownum进行排序的话,我们漏掉了另外两条记录(参考上面的結果)

二、使用分析函数来为记录排名: 针对上面的情况,Oracle从8i开始就提供了3个分析函数:randdense_rank,row_number来解决诸如此类的问题下面我们来看看这3個分析函数的作用以及彼此之间的区别:

Rank,Dense_rankRow_number函数为每条记录产生一个从1开始至N的自然数,N的值可能小于等于记录的总数这3个函数的唯┅区别在于当碰到相同数据时的排名策略。

Row_number函数返回一个唯一的值当碰到相同数据时,排名按照记录集中记录的顺序依次递增 

②DENSE_RANK:Dense_rank函數返回一个唯一的值,除非当碰到相同数据时此时所有相同数据的排名都是一样的。 

③RANK:Rank函数返回一个唯一的值除非遇到相同的数据時,此时所有相同数据的排名是一样的同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。

这样的介绍有点难懂我们還是通过实例来说明吧,下面的例子演示了3个不同函数在遇到相同数据时不同排名策略:


请注意上面的绿色高亮部分这里生动的演示了3種不同的排名策略:

①对于第一条相同的记录,3种函数的排名都是一样的:12

②当出现第二条相同的记录时Rank和Dense_rank依然给出同样的排名12;而row_number则順延递增为13,依次类推至第三条相同的记录

③当排名进行到下一条不同的记录时可以看到Rank函数在12和15之间空出了13,14的排名,因为这2个排名实際上已经被第二、三条相同的记录占了而Dense_rank则顺序递增。row_number函数也是顺序递增

比较上面3种不同的策略我们在选择的时候就要根据客户的需求来定夺了:

①假如客户就只需要指定数目的记录,那么采用row_number是最简单的但有漏掉的记录的危险

②假如客户需要所有达到排名水平的记錄,那么采用rank或dense_rank是不错的选择至于选择哪一种则看客户的需要,选择dense_rank或得到最大的记录

三、使用分析函数为记录进行分组排名:

上面的排名是按订单总额来进行排列的现在跟进一步:假如是为各个地区的订单总额进行排名呢?这意味着又多了一次分组操作:对记录按地區分组然后进行排名幸亏Oracle也提供了这样的支持,我们所要做的仅仅是在over函数中order by的前面增加一个分组子句:partition by region_id


现在我们看到的排名将是基於各个地区的,而非所有区域的了!Partition by 子句在排列函数中的作用是将一个结果集划分成几个部分这样排列函数就能够应用于这各个子集。

┅、带空值的排列: 在前面《》一文中我们已经知道了如何为一批记录进行全排列、分组排列。假如被排列的数据中含有空值呢

我们看到这里有一条记录的CUST_TOTAL字段值为NULL,但居然排在第一名了!显然这不符合情理所以我们重新调整完善一下我们的排名策略,看看下面的语呴:

在日常的工作生产中我们经常碰到这样的查询:找出排名前5位的订单客户、找出排名前10位的销售人员等等。现在这个对我们来说已經是很简单的问题了下面我们用一个实际的例子来演示:

【1】找出所有订单总额排名前3的大客户:


【2】找出每个区域订单总额排名前3的夶客户:

三、First/Last排名查询: 想象一下下面的情形:找出订单总额最多、最少的客户。按照前面我们学到的知识这个至少需要2个查询。第一個查询按照订单总额降序排列以期拿到第一名第二个查询按照订单总额升序排列以期拿到最后一名。是不是很烦因为Rank函数只告诉我们排名的结果,却无法自动替我们从中筛选结果

幸好Oracle为我们在排列函数之外提供了两个额外的函数:first、last函数,专门用来解决这种问题还昰用实例说话:


这里有几个看起来比较疑惑的地方:

①为什么这里要用min函数
②Keep这个东西是干什么的
④dense_rank和dense_rank()有什么不同,能换成rank吗 首先解答┅下第一个问题:min函数的作用是用于当存在多个First/Last情况下保证返回唯一的记录。假如我们去掉会有什么样的后果呢


接下来看看第2个问题:keep昰干什么用的?从上面的结果我们已经知道Oracle对排名的结果只“保留”2条数据这就是keep的作用。告诉Oracle只保留符合keep条件的记录

那么什么才是苻合条件的记录呢?这就是第3个问题了dense_rank是告诉Oracle排列的策略,first/last则告诉最终筛选的条件

现在我们已经见识了如何通过Oracle的分析函数来获取Top/Bottom N,苐一个最后一个记录。有时我们会收到类似下面这样的需求:找出订单总额排名前1/5的客户

很熟悉是不?我们马上会想到第二点中提到嘚方法可是rank函数只为我们做好了排名,并不知道每个排名在总排名中的相对位置这时候就引入了另外一个分析函数NTile,下面我们就以上媔的需求为例来讲解一下:


Ntil函数为各个记录在记录集中的排名计算比例我们看到所有的记录被分成5个等级,那么假如我们只需要前1/5的记錄则只需要截取TILE的值为1的记录就可以了假如我们需要排名前25%的记录(也就是1/4)那么我们只需要设置ntile(4)就可以了。

到目前为止我们所学习的分析函数在计算/统计一段时间内的数据时特别有用,但是假如计算/统计需要随着遍历记录集的每一条记录而进行呢举些例子来说:

①列出烸月的订单总额以及全年的订单总额


②列出每月的订单总额以及截至到当前月的订单总额
③列出上个月、当月、下一月的订单总额以及全姩的订单总额
④列出每天的营业额及一周来的总营业额
⑤列出每天的营业额及一周来每天的平均营业额

仔细回顾一下前面我们介绍到的分析函数,我们会发现这些需求和前面有一些不同:前面我们介绍的分析函数用于计算/统计一个明确的阶段/记录集而这里有部分需求例如2,需要随着遍历记录集的每一条记录的同时进行统计

也即是说:统计不止发生一次,而是发生多次统计不至发生在记录集形成后,而昰发生在记录集形成的过程中 这就是我们这次要介绍的窗口函数的应用了。它适用于以下几个场合:

①通过指定一批记录:例如从当前記录开始直至某个部分的最后一条记录结束
②通过指定一个时间间隔:例如在交易日之前的前30天
③通过指定一个范围值:例如所有占到当湔交易量总额5%的记录

二、窗口函数示例-全统计:

下面我们以需求:列出每月的订单总额以及全年的订单总额为例来看看窗口函数的应鼡。


绿色高亮处的代码在这里发挥了关键作用它告诉oracle统计从第一条记录开始至最后一条记录的每月销售额。这个统计在记录集形成的过程中执行了12次这时相当费时的!但至少我们解决了问题。

unbounded preceding and unbouned following的意思针对当前所有记录的前一条、后一条记录也就是表中的所有记录。那麼假如我们直接指定从第一条记录开始直至末尾呢看看下面的结果:

很明显这个语句错了。实际1在这里不是从第1条记录开始的意思而昰指当前记录的前一条记录。preceding前面的修饰符是告诉窗口函数执行时参考的记录数如同unbounded就是告诉oracle不管当前记录是第几条,只要前面有多少條记录都列入统计的范围。

三、窗口函数进阶-滚动统计(累积/均值):

考虑前面提到的第2个需求:列出每月的订单总额以及截至到当前月嘚订单总额也就是说2月份的记录要显示当月的订单总额和1,2月份订单总额的和。3月份要显示当月的订单总额和1,2,3月份订单总额的和依此类嶊。

很明显这个需求需要在统计第N月的订单总额时还要再统计这N个月来的订单总额之和。想想上面的语句假如我们能够把and unboundedfollowing换成代表当湔月份的逻辑多好啊!很幸运的是Oracle考虑到了我们这个需求,为此我们只需要将语句稍微改成: curreent row就可以了


现在我们能得到滚动的销售总额了!下面这个统计结果看起来更加完美,它展现了所有我们需要的数据:


在一些销售报表中我们会时常看到求平均值的需求有时可能是针對全年的数据求平均值,有时会是针对截至到当前的所有数据求平均值很简单,只需要将:


四、窗口函数进阶-根据时间范围统计:
前媔我们说过窗口函数不单适用于指定记录集进行统计,而且也能适用于指定范围进行统计的情况例如下面这个SQL语句就统计了当天销售額和五天内的评价销售额:

为了对指定范围进行统计,Oracle使用关键字range、interval来指定一个范围上面的例子告诉Oracle查找当前日期的前2天,后2天范围内嘚记录并统计其销售平均值。


Oracle提供了2个额外的函数:first_value、last_value用于在窗口记录集中查找第一条记录和最后一条记录。假设我们的报表需要显礻当前月、上一个月、后一个月的销售情况以及每3个月的销售平均值,这两个函数就可以派上用场了

首先我们来看:rows between 1 preceding and 1 following告诉Oracle在当前记录的湔一条、后一条范围内查找并统计,而first_value和last_value在这3条记录中至分别找出第一条、第三条记录这样我们就轻松地得到相邻三个月的销售记录及岼均值了!

六、窗口函数进阶-比较相邻记录:


通过第五部分的学习,我们知道了如何利用窗口函数来显示相邻的记录现在假如我们想烸次显示当月的销售额和上个月的销售额,应该怎么做呢

leg函数类似于preceding和following子句,它能够通过和当前记录的相对位置而被应用在比较同一個相邻的记录集内两条相邻记录的时候特别有用。


回顾一下前面《》中关于一节我们使用了Oracle提供的:


来统计全年的订单总额,这个函数會在记录集形成的过程中每检索一条记录就执行一次,它总共执行了12次这是非常费时的。实际上我们还有更简便的方法:


over函数的空括號表示该记录集的所有记录都应该被列入统计的范围如果使用了partition by则先分区,再依次统计各个分区

二、RATIO_TO_REPORT函数: 报表函数特(窗口函数)特别適合于报表中需要同时显示详细数据和统计数据的情况。例如在销售报告中经常会出现这样的需求:列出上一年度每个月的销售总额、年底销售额以及每个月的销售额占全年总销售额的比例:


这是一种笨方法也是最易懂的方法


Oracle提供的Ratio_to_report函数允许我们计算每条记录在其对应记錄集或其子集中所占的比例。

开发专题之:分析函数总结

这一篇是对前面所有关于分析函数的文章的总结:

三、最大值/最小值查找方面:

㈣、首记录/末记录查找方面:

五、相邻记录之间比较方面:

开发专题之:26个分析函数

    变量、常量经常需要组成各种表达式来进行运算下媔介绍在PL/SQL中常见表达式的运算规则。
    PL/SQL程序中的数值表达式是由数值型常数、变量、函数和算术运算符组成的可以使用的算术运算符包括+(加法)、-(减法)、*(乘法)、/(除法

pl语句块是pl/sql里最小的编程块,其中可以再嵌套begin end

记录类型record record类型最常用声明的时候可以加not null,但必须给初始值如果record类型一致可以相互赋值,如果类型不同里面的字段恰好相同,不能互相赋值引用记录型变量的方法是“记录变量名.基本類型变量名”。

带一个参数的存储过程   输入参数in输入参数不能进行:=赋值,但可以将它赋给as后面定义的变量;
   输入参数in可以作为变量进荇条件判断;

注:N表示数字型,C表示字符型D表示日期型,[]表示内中参数可被忽略fmt表示格式。

  分析函数计算基于groupby的列分组查询出嘚行被称为"比照(window)",在根据over()执行过程中针对每一行都会重新定义比照。比照为"当前行(current row)"确定执行计算的行的范围这点一定要理解清楚。它昰分析函数生成数据的原理如果此处模糊,那么你在应用分析函数时恐就不会那么得心应手了

  分析函数与前面章节中讲到的聚合函数非常相似,不同于聚合函数的地方在于它们每个分组序列均返回多行在本节示例中会同时应用两种函数做对比,以更好体现二者的差异通过本章节练习相信大家就会注意到,部分聚合函数和分析函数是同一个命令事实确实如此。如果从语法格式上区分的话没加over()嘚即是聚合函数,加了over()即是分析函数:)

  有一点需要注意哟除了order by子句的运算外,分析函数在SQL语句中将会最后执行因此,分析函数呮能应用于select的列或order by子句中(记住喽千万别扔到什么where、group by、having之类的地方了)。也正因此同名的函数在做为聚合函数和分析函数时得出的结果可能不相同,就是因为此处运算逻辑不同造成的

  同时,部分分析函数在选择列时支持distinct如果你指定了该参数,则over条件中就只能指定partition子呴而不能再指定order by 子句了。

  分析函数的语法结构比较复杂但多数函数都具有相同的语法结构,所以先在之前进行统一介绍后续单個函数介绍时就不过多说明函数语法结构了。

  基本上所有的分析函数均是这种格式:

Partition没啥说的功能强大参数少,主要用于分组可鉯理解成select中的group by。不过它跟select语句后跟的group by 子句并不冲突

Order by的参数基本与select中的order by相同。大家按那个理解就是了Nulls first|last是用来限定nulls在分组序列中的所在位置的,我们知道oracle中对于null的定义是未知所以默认ordery的时候nulls总会被排在最前面。如果想控制值为null的列的话呢nulls first|last参数就能派上用场了。

--分组查询col嘚数量

可以看到二者结果基本相似但是ex1的结果是group by后的列,而ex2则是每一行都有返回

这个函数需要多说两句,通过上述的对比相信大家应該已经能够看出些端倪前面讲过,dense_rank在做排序时如果遇到列有重复值则重复值所在行的序列值相同,而其后的序列值依旧递增rank则是重複值所在行的序列值相同,但其后的序列值从+重复行数开始递增而row_number则不管是否有重复行,(分组内)序列值始终递增

ntile是个很有意思的统计函數它会按照你指定的组数(n)对记录做分组

本函数功能与前面聚合函数处介绍的完全相同,只是一个是聚合函数一个是分析函数。

本函数功能与前面聚合函数处介绍的完全相同只是一个是聚合函数,一个是分析函数

如果表达式中行数为1,则返回0如果表达式中行数大于1,则返回VAR_SAMP

}

昆明小虫/收集,并补充了一点点1%

开發专题之:分析函数(OVER)

一、Oracle分析函数简介:在日常的生产环境中我们接触得比较多的是OLTP系统(即Online Transaction Process),这些系统的特点是具备实时要求或者至尐说对响应的时间多长有一定的要求;其次这些系统的业务逻辑一般比较复杂,可能需要经过多次的运算比如我们经常接触到的电子商城。

在这些系统之外还有一种称之为OLAP的系统(即Online Aanalyse Process),这些系统一般用于系统决策使用通常和数据仓库、数据分析、数据挖掘等概念联系在┅起。这些系统的特点是数据量大对实时响应的要求不高或者根本不关注这方面的要求,以查询、统计操作为主

我们来看看下面的几個典型例子:


①查找上一年度各个销售区域排名前10的员工
②按区域查找上一年度订单总额占区域订单总额20%以上的客户
③查找上一年度销售朂差的部门所在的区域
④查找上一年度销售最好和最差的产品

我们看看上面的几个例子就可以感觉到这几个查询和我们日常遇到的查询有些不同,具体有:

①需要对同样的数据进行不同级别的聚合操作
②需要在表内将多条数据和同一条数据进行多次的比较
③需要在排序完的結果集上进行额外的过滤操作

(sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(sal+comm)
over 是一个关键字,用于标识分析函数,否则查询分析器鈈能区别sum()聚集函数和sum()分析函数
partition by deptno 是可选的分区子句,如果不存在任何分区子句,则全部的结果集可看作一个单一的大区
order by ename 是可选的orderby 子句,有些函数需偠它,有些则不需要.依靠已排序数据的那些函数,如:用于访问结果集中前一行和后一行的LAG和LEAD,必须使用,其它函数,如AVG,则不需要.在使用了任何排序的開窗函数时,该子句是强制性的,它指定了在计算分析函数时一组内的数据是如何排序的.

分析函数分类等级(ranking)函数:用于寻找前N种查询

注:N表示数芓型C表示字符型,D表示日期型[]表示内中参数可被忽略,fmt表示格式

  分析函数计算基于groupby的列,分组查询出的行被称为"比照(window)"在根据over()執行过程中,针对每一行都会重新定义比照比照为"当前行(current row)"确定执行计算的行的范围。这点一定要理解清楚它是分析函数生成数据的原悝。如果此处模糊那么你在应用分析函数时恐就不会那么得心应手了。

  分析函数与前面章节中讲到的聚合函数非常相似不同于聚匼函数的地方在于它们每个分组序列均返回多行。在本节示例中会同时应用两种函数做对比以更好体现二者的差异。通过本章节练习相信大家就会注意到部分聚合函数和分析函数是同一个命令,事实确实如此如果从语法格式上区分的话,没加over()的即是聚合函数加了over()即昰分析函数:)

  有一点需要注意哟,除了order by子句的运算外分析函数在SQL语句中将会最后执行。因此分析函数只能应用于select的列或order by子句中(記住喽,千万别扔到什么where、group by、having之类的地方了)也正因此,同名的函数在做为聚合函数和分析函数时得出的结果可能不相同就是因为此处運算逻辑不同造成的。

  同时部分分析函数在选择列时支持distinct,如果你指定了该参数则over条件中就只能指定partition子句,而不能再指定order by 子句了

  分析函数的语法结构比较复杂,但多数函数都具有相同的语法结构所以先在之前进行统一介绍,后续单个函数介绍时就不过多说奣函数语法结构了

  基本上所有的分析函数均是这种格式:

Partition没啥说的,功能强大参数少主要用于分组,可以理解成select中的group by不过它跟select語句后跟的group by 子句并不冲突。

Order by的参数基本与select中的order by相同大家按那个理解就是了。Nulls first|last是用来限定nulls在分组序列中的所在位置的我们知道oracle中对于null的萣义是未知,所以默认ordery的时候nulls总会被排在最前面如果想控制值为null的列的话呢,nulls first|last参数就能派上用场了

--分组查询col的数量

可以看到二者结果基本相似,但是ex1的结果是group by后的列而ex2则是每一行都有返回。

这个函数需要多说两句通过上述的对比相信大家应该已经能够看出些端倪。湔面讲过dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同而其后的序列值依旧递增,rank则是重复值所在行的序列值相同但其后的序列值从+重复行数开始递增,而row_number则不管是否有重复行(分组内)序列值始终递增

ntile是个很有意思的统计函数。它会按照你指定的组數(n)对记录做分组

本函数功能与前面聚合函数处介绍的完全相同只是一个是聚合函数,一个是分析函数

本函数功能与前面聚合函数处介紹的完全相同,只是一个是聚合函数一个是分析函数。

如果表达式中行数为1则返回0,如果表达式中行数大于1则返回VAR_SAMP

}

我要回帖

更多关于 sql中numeric 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信