over在SQL里就啥意思
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了over在SQL里就啥意思相关的知识,希望对你有一定的参考价值。
参考技术A RANK(
)
OVER
(
[query_partition_clause]
order_by_clause
)
DENSE_RANK
(
)
OVER
(
[query_partition_clause]
order_by_clause
)
可实现按指定的字段分组排序,对于相同分组字段的结果集进行排序,
其中PARTITION
BY
为分组字段,ORDER
BY
指定排序字段
over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
其参数:over(partition
by
columnname1
order
by
columnname2)
含义:按columname1指定的字段进行分组排序,或者说按字段columnname1的值进行分组排序。
例如:employees表中,有两个部门的记录:department_id
=10和20
select
department_id,rank()
over(partition
by
department_id
order
by
salary)
from
employees就是指在部门10中进行薪水的排名,在部门20中进行薪水排名。如果是partition
by
org_id,则是在整个公司内进行排名。
以下是个人见解:
sql中的over函数和row_numbert()函数配合使用,可生成行号。可对某一列的值进行排序,对于相同值的数据行进行分组排序。如下表:
执行语句:select
row_number()
over(order
by
AID
DESC)
as
rowid,*
from
bb后的结果如下:
rowid标识行号有了,同时AID也按降序排列。AID有重复的记录,如果要删除rowid为2所对应的记录则可以:
with
[a]
as
(select
row_number()
over(order
by
AID
desc)
as
rowid,*
from
bb)
delete
from
[a]
where
rowid=2
如果查看rowid
为5所对应的记录的信息,可以:
with
[b]
as
(select
row_number()
over(order
by
AID
desc)
as
rowid,*
from
bb)
select
*
from
[b]
where
rowid=5
注意:
over里的order只能查查询里的原始数据进行操作,不会对计算出的新值或新字段起作用。
msdn中的说法如下:
<ORDER
BY
子句>
只能引用通过
FROM
子句可用的列。<ORDER
BY
子句>不能与聚合窗口函数一起使用。
mybatis 在查询的时候,可以返回Map,但是一旦这个字段为null的时候,map里就没有了,怎么解决这个问题?
不明白你说的意思,map里边没有那不就是null吗?在使用的时候可以判断一下 如果是null就使用默认值啊,或者在sql里直接用默认值把null值替代掉 参考技术A nullValue 当查询值为null的时候替换成什么值 可以用这个属性 这是ibatis里的 mybatis里我想也有追问在mybatis当中好像没有nullValue这个属性啊?
参考技术B 用这样的配置参数试试<result column="AA06" property="aa06" jdbcType="DECIMAL" nullValue=""/>追问
在mybatis当中好像没有nullValue这个属性啊?
晕,ibatis升级到mybatis把这个属性拿掉!!!
追问那问题怎么解决呢?
追答Mybatis暂时还没怎么用过,可以在查询语句里把null处理一下
以上是关于over在SQL里就啥意思的主要内容,如果未能解决你的问题,请参考以下文章