2017.8.10 习题随笔

本文介绍了SQL中between、distinct及row_number() over()等函数的使用技巧。详细解释了between函数的正确使用方法,distinct在多字段上的应用以及row_number() over()函数在分组排序中的运用,并展示了如何实现数据去重。

1.between使用的小细节

在使用between 函数限定范围的时候,要注意小的在前大的在后

 

这样使用between会导致结果为“0”

代码运行结果如下

将代码修改后

代码课正确运行

 2.distinct使用(引)

当 distinct 作用在多个字段的时候,她只会将所有字段值都相同的记录“去重”掉

完全相同的记录,验证一下即可。添加一条记录后的表如下所示:

添加一条记录

再运行如下的 SQL 语句,

?
1
select distinct name , age from PPPRDER.CESHIDEMO

得到的结果如下所示:

nameandage

 

3.row_number()  over(partiton by colunm1 order by colunm2)

 

将表中的记录按字段 COLUMN1进行分组,按字段 COLUMN2 进行排序,其中

 

PARTITION BY:表示分组ORDER BY:表示排序

 

接下来,咱们还用表“CESHIDEMO”中的数据进行测试。首先,给出没有使用 row_number() over() 函数时查询的结果,如下所示:

 

添加一条记录

 

然后,运行如下 SQL 语句,

 

?
1
select PPPRDER.CESHIDEMO.*, row_number() over(partition by age order by name desc ) from PPPRDER.CESHIDEMO

 

得到的结果如下所示:

 

函数

 

从上面的结果可以看出,其在原表的基础上,多了一列标有数字排序的列。那么反过来分析咱们运行的 SQL 语句,发现其确实按字段 AGE 的值进行分组了,也按字段 NAME 的值进行排序啦!因此,函数的功能得到了验证。

 

接下来,咱们就研究如何用 row_number() over() 函数实现“去重”的功能。通过观察上面的结果,咱们可以发现,如果以 NAME 分组,以 AGE 排序,然后再取每组的第一个记录或许就可以实现“去重”的功能啊!那么试试看,运行如下 SQL 语句,

 

?
1
2
3
4
5
6
7
/*
* 其中 rn 表示最后添加的那一列
*/
 
select * from
( select PPPRDER.CESHIDEMO.*, row_number() over(partition by name order by age desc ) rn from PPPRDER.CESHIDEMO)
where rn = 1

 

运行后,得到的结果如下所示:

 

rn

 

转载于:https://www.cnblogs.com/CCCQ/p/7337873.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值