分页查询(用rownumber和开窗函数over更方便)

| 收藏本文 下载本文 作者:xixi努力学习

以下是小编帮大家整理的分页查询(用rownumber和开窗函数over更方便)(共含5篇),仅供参考,大家一起来看看吧。同时,但愿您也能像本文投稿人“xixi努力学习”一样,积极向本站投稿分享好文章。

分页查询(用rownumber和开窗函数over更方便)

篇1:分页查询(用rownumber和开窗函数over更方便)

查询MyStudents表中第8页中的数据(每页3条记录)

--(1)

select * from

(

select *,

ROW_NUMBERover(order by FId asc) as Rnumber

from MyStudents

)

as Tbl3

where Rnumber between (3*7+1) and 3*8

--(2)

select top 3 * from MyStudents

where FId not in

(select top (3*7) FId from MyStudents

order by FId )

order by FId

篇2:oracle的分析函数over及开窗函数

oracle的分析函数over及开窗函数

eg: 相关解析:

表t_pi_part

字段 id code name

value 1 222  a

value 2 222  b

value 3 333  c

给code相同的part code 添加行标,根据id 排序

select p.* ,row_number()over(partition by p.code order order by a.id desc) as row_index from t_pi_part p;

一:分析函数over

Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是

对于每个组返回多行,而聚合函数对于每个组只返回一行,

下面通过几个例子来说明其应用。

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

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)

篇3:Word查询文档编辑修改信息更方便

Word文档在编辑过程中可能会经过多次修改,

Word2010查询文档编辑修改信息更方便

。那么在这篇文档中我们究竟花费了多大的精力去编辑修改呢?Word 2010可以给你准确答案,

首先打开要查询的文档,依次单击“文件”――“信息”按钮,在“信息”面板中单击“属性”按钮,然后在打开的下拉列表中选择“高级属性”选项。在打开的“文档属性”对话框中,切换到“统计”选项卡。在这里大家可以查看“修改时间”、“上次保存者”、“修订次数”等信息,这样你付出的辛苦就一目了然了。

篇4:用SQL进行函数查询数据库教程

Oracle 9i提供了很多函数可以用来辅助数据查询,

用SQL进行函数查询数据库教程

。接下来我们介绍常用的函数功能及使用方法。

4.5.1 【ceil】函数

在【命令编辑区】输入“select mgr, mgr/100,ceil(mgr/100) from scott.emp;”,然后单击【执行】按钮,出现如图4.29所示的结果。

【参见光盘文件】:\第4章\4.5\451.sql。

【ceil】函数用法:ceil(n),取大于扔谑值n的最小整数。

4.5.2 【floor】函数

在【命令编辑区】输入“select mgr, mgr/100,floor(mgr/100) from scott.emp;”,然后单击【执行】按钮,出现如图4.30所示的结果。

【参见光盘文件】:\第4章\4.5\452.sql。

【floor】函数用法:floor(n),取小于等于数值n的最大整数。

4.5.3 【mod】函数

在【命令编辑区】输入“select mgr, mod(mgr,1000), mod(mgr,100), mod(mgr,10) from scott.emp;”,然后单击【执行】按钮,出现如图4.31所示的结果。

【参见光盘文件】:\第4章\4.5\453.sql。

【mod】函数用法:mod(m,n),取m整除n后的余数。

4.5.4 【power】函数

在【命令编辑区】输入“select mgr, power(mgr,2),power(mgr,3) from scott.emp;”,然后单击【执行】按钮,出现如图4.32所示的结果。

【参见光盘文件】:\第4章\4.5\454.sql。

【power】函数用法:power(m,n),取m的n次方。

4.5.5 【round】函数

在【命令编辑区】输入“select mgr, round(mgr/100,2),round(mgr/1000,2) from scott.emp;”,然后单击【执行】按钮,出现如图4.33所示的结果。

【参见光盘文件】:\第4章\4.5\455.sql。

【round】函数用法:round(m,n),四舍五入,保留n位。

4.5.6 【sign】函数

在【命令编辑区】输入“select mgr, mgr-7800,sign(mgr-7800) from scott.emp;”,然后单击【执行】按钮,出现如图4.34所示的结果,

【参见光盘文件】:\第4章\4.5\456.sql。

【sign】函数用法:sign(n)。n>0,取1;n=0,取0;n<0,取-1。

4.5.7 【avg】函数

在【命令编辑区】输入“select avg(mgr)平均薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.35所示的结果。

【参见光盘文件】:\第4章\4.5\457.sql。

【avg】函数用法:avg(字段名),求平均值。要求字段为数值型。

4.5.8 【count】函数

(1)在【命令编辑区】输入“select count(*) 记录总数 from scott.emp;”,然后单击【执行】按钮,出现如图4.36所示的结果。

【参见光盘文件】:\第4章\4.5\458-1.sql。

(2)在【命令编辑区】输入“select count(distinct job ) 工作类别总数 from scott.emp;”,然后单击【执行】按钮,出现如图4.37所示的结果。

【参见光盘文件】:\第4章\4.5\458-2.sql。

【count】函数用法:count(字段名)或count(*),统计总数。

4.5.9 【min】函数

在【命令编辑区】输入“select min(sal) 最少薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.38所示的结果。

【参见光盘文件】:\第4章\4.5\459.sql。

【min】函数用法:min(字段名),计算数值型字段最小数。

4.5.10 【max】函数

在【命令编辑区】输入“select max(sal) 最高薪水 from scott.emp;”,然后单击【执行】按钮,出现如图4.39所示的结果。

【参见光盘文件】:\第4章\4.5\4510.sql。

【max】函数用法:max(字段名),计算数值型字段最大数。

4.5.11 【sum】函数

在【命令编辑区】输入“select sum(sal) 薪水总和 from scott.emp;”,然后单击【执行】按钮,出现如图4.40所示的结果。

【参见光盘文件】:\第4章\4.5\4511.sql。

【sum】函数用法:sum(字段名),计算数值型字段总和。

通过上面4类查询实例的学习,读者可以举一反三,灵活运用。用SQL进行数据的查询就介绍到这里,下面学习如何录入数据。

篇5:用ET表格打造更直观的学生成绩分析之相关函数

前些天在论坛发了一帖:《用ET表格打造更直观的学生成绩分析》(以下简称为《成绩分析》),bbs.wps.cn/thread-21963426-1-1.html,很多坛友对文中所涉及的函数非常感兴趣。今天再发一帖对相关的函数作些解释以作前文的补充。

前文中所涉及的函数主要有这么几个:SUMIF、COUNTIF、SUMPRODUCT、VLOOKUP。这几个函数在成绩分析统计中经常用得到,对于教师来说可谓是有用之极。我们且一一道来。

一、SUMIF函数

SUMIF函数的作用是根据指定条件对若干单元格、区域或引用求和。其语法为SUMIF(用于条件判断的单元格区域,由数字、逻辑表达式等组成的判定条件,为需要求和的单元格、区域或者是引用)。以图1所示表格为例。

图1

我们希望在D13单元格中显示表格中2班学生的语文成绩总分。分析可以看到学生的班级在B2:B11单元格区域,语文成绩则分布在D2:D11单元格区域。所以,根据SUMIF函数的语法,我们只需要在D13单元格输入公式“=SUMIF($B$2:$B$11,“2班”,D2:D11)”就可以了。其中参数“2班”为判断条件,$B$2:$B$11为提供逻辑判断依据的单元格区域,而D2:D11则为实际求和的单元格区域。所以,公式 “=SUMIF($B$2:$B$11,“2班”,D2:D11)”可以翻译为:在B2:B11单元格中值为“2班”的,对其对应的D列单元格数据进行求和。

在《成绩分析》一文中,公式“=SUMIF($B:$B,$Q$3,D:D)”就很容易理解了:在B列中其值与Q3单元格相等的,对其对应的D列单元格进行求和。

二、COUNTIF函数

COUNIT函数的作用是计算区域中满足给定条件的单元格的个数。语法与SUMIF函数类似:COUNTIF(为需要计算其中满足条件的单元格数目的单元格区域,统计条件)。其中统计条件可以为数字、表格式或文本。简单地理解就是COUNTIF(在哪里计数,根据什么计数)。

仍以图1所示表格为例。我们如果输入公式“=COUNTIF($B$2:$B$11,“2班”),那么自然就可以得到B2:B11单元格区域中值为“2班”的单元格数目。所以,D14单元格要统计2班语文平均分就简单多了,只需要输入公式“=D13/COUNTIF($B$2:$B$11,“2 班”)”就OK了。

三、SUMPRODUCT函数

该函数可用于多条件计数,即计算符合2个及以上条件的单元格个数。其语法为SUMPRODUCT((条件1)*(条件2)* (条件…))。如图2所示表格。

图2

我们如果要统计表格中职称为“中高”的男教师数,那么只需要在单元格中输入公式“=SUMPRODUCT((Q2:Q11=“男”)*(R2:R11=“中高”))”即可,

相信对照表格和公式,公式的含义自然就清楚了。

图1所示表格中“班级”在B列,语文成绩在D列。假如要计算2班语文科目的及格率,那么就需要先统计符合两个条件的单元格数目。条件1:B列为“2班”,条件2:D列大于或等于60分。公式“=SUMPRODUCT(($B$2:$B$11=“2班”)*(D2:D11>=60))”就可以满足要求,然后再除以人数(COUNTIF($B$2:$B$11,“2班”))不就是及格率了?

成绩分析统计中的“优秀率”也是这样统计,只是把分数从“60”换成设定的成绩就行了。

四、VLOOKUP函数

VLOOKUP函数的作用是在表格或数值数组的首列查找指定的数值,并由此返回表格或数组当前行中指定列处的数值。其语法是 VLOOKUP(查找值,数据表,列序数,匹配条件)。所谓“查找值”是指需要在数据表第一列中查找的数值,它可以是数值、引用或文字串。“数据表” 为需要在其中查找数据的数据表,可以使用对区域或区域名称的引用。“列序数”是在数据表中待返回匹配数据所在的列序号。“匹配条件”为“FALSE”是返回精确匹配值,如果为TRUE或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于“查找值”的最大数值。

还是举例来说更清楚些。假设我们想知道在图2所示表格中“教师04”的职称是什么。那么我们就可以在单元格中输入公式“=VLOOKUP(“教师04”,P2:R11,3,FALSE)”,回车就出结果了,如图3所示。

图3

公式的含义是在P2:R11单元格区域的首列查找值为“教师04”的单元格,并返回其所在行的第三列数据。对照表格看一下就清楚了。

在《成绩分析》一文中的VLOOKUP函数中,使用了另一函数COLUMN(),它返回的是单元格所在的列数。比如公式“=COLUMN(D3)”的结果就是“4”。而不带任何参数的“COLUMN()”返回的则是当前单元格所在的列数。

好了,《成绩分析》一文中涉及的函数基本交待完了。如何有机会实践一下,必定能体会到使用这些函数的乐趣。

用Excel条件格式和函数实现隔行换色

矩形板一对边受分布载荷用和函数法的级数解答

分页查询(用rownumber和开窗函数over更方便)(整理5篇)

欢迎下载DOC格式的分页查询(用rownumber和开窗函数over更方便),但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式

相关文章

热门推荐

HOT

猜你喜欢

NEW
点击下载本文文档