测试样例:

 create table test(rsrp string,rsrq string,tkey string,distan string);

 insert into test values('-90.28','-37','tkey1','');
insert into test values('-92.35','-40','tkey1','');
insert into test values('-94.36','-34','tkey2','');
insert into test values('-93.88','-38','tkey2',''); select * from test;
+------------+------------+------------+--------------+--+
| test.rsrp | test.rsrq | test.tkey | test.distan |
+------------+------------+------------+--------------+--+
| -90.28 | -37 | tkey1 | 10 |
| -92.35 | -40 | tkey1 | 30 |
| -94.36 | -34 | tkey2 | 5 |
| -93.88 | -38 | tkey2 | 19 |
+------------+------------+------------+--------------+--+ select rsrp,rsrq,tkey,distan,row_number()over(partition by tkey order by distan asc) rn
from test
group by rsrp,rsrq,tkey,distan;
+---------+-------+--------+---------+-----+--+
| rsrp | rsrq | tkey | distan | rn |
+---------+-------+--------+---------+-----+--+
| -90.28 | -37 | tkey1 | 10 | 1 |
| -92.35 | -40 | tkey1 | 30 | 2 |
| -93.88 | -38 | tkey2 | 19 | 1 |
| -94.36 | -34 | tkey2 | 5 | 2 |
+---------+-------+--------+---------+-----+--+

新建测试表:

create table grid_test(
buildingid nvarchar(32),
gridid nvarchar(32),
height int,
gridx nvarchar(32),
gridy nvarchar(32),
eci nvarchar(32),
total_num int
)

测试分组

insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci1',123)
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci1',2)
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci1',19)
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci1',50)
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci1',78) insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci2',98)
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci2',22)
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci2',19)
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci2',87)
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci2',78) --栅格小区分组排序
select buildingid,gridid,height,gridx,gridy,eci,total_num,row_number()over(partition by buildingid,gridid,height,gridx,gridy,eci order by total_num desc) rn
from grid_test
group by buildingid,gridid,height,gridx,gridy,eci,total_num; buildingid gridid height gridx gridy eci total_num rn
building1 gridid1 1 gridid1 x gridid1 y eci1 123 1
building1 gridid1 1 gridid1 x gridid1 y eci1 78 2
building1 gridid1 1 gridid1 x gridid1 y eci1 50 3
building1 gridid1 1 gridid1 x gridid1 y eci1 19 4
building1 gridid1 1 gridid1 x gridid1 y eci1 2 5
building1 gridid1 1 gridid1 x gridid1 y eci2 98 1
building1 gridid1 1 gridid1 x gridid1 y eci2 87 2
building1 gridid1 1 gridid1 x gridid1 y eci2 78 3
building1 gridid1 1 gridid1 x gridid1 y eci2 22 4
building1 gridid1 1 gridid1 x gridid1 y eci2 19 5 --栅格分组排序
select buildingid,gridid,height,gridx,gridy,eci,total_num,row_number()over(partition by buildingid,gridid,height,gridx,gridy order by total_num desc) rn
from grid_test
group by buildingid,gridid,height,gridx,gridy,eci,total_num buildingid gridid height gridx gridy eci total_num rn
building1 gridid1 1 gridid1 x gridid1 y eci1 123 1
building1 gridid1 1 gridid1 x gridid1 y eci2 98 2
building1 gridid1 1 gridid1 x gridid1 y eci2 87 3
building1 gridid1 1 gridid1 x gridid1 y eci1 78 4
building1 gridid1 1 gridid1 x gridid1 y eci2 78 5
building1 gridid1 1 gridid1 x gridid1 y eci1 50 6
building1 gridid1 1 gridid1 x gridid1 y eci2 22 7
building1 gridid1 1 gridid1 x gridid1 y eci1 19 8
building1 gridid1 1 gridid1 x gridid1 y eci2 19 9
building1 gridid1 1 gridid1 x gridid1 y eci1 2 10

行专列:

truncate table grid_test;
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci10',123);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci11',2);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci12',19);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci13',50);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci14',78);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci21',98);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci22',22);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci23',19);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci24',87);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci25',78); select buildingid,gridid,height,gridx,gridy,eci,total_num,row_number()over(partition by buildingid,gridid,height,gridx,gridy order by total_num desc) rn
from grid_test
group by buildingid,gridid,height,gridx,gridy,eci,total_num buildingid gridid height gridx gridy eci total_num rn
building1 gridid1 1 gridid1 x gridid1 y eci10 123 1
building1 gridid1 1 gridid1 x gridid1 y eci14 78 2
building1 gridid1 1 gridid1 x gridid1 y eci13 50 3
building1 gridid1 1 gridid1 x gridid1 y eci12 19 4
building1 gridid1 1 gridid1 x gridid1 y eci11 2 5
building1 gridid2 1 gridid2 x gridid2 y eci21 98 1
building1 gridid2 1 gridid2 x gridid2 y eci24 87 2
building1 gridid2 1 gridid2 x gridid2 y eci25 78 3
building1 gridid2 1 gridid2 x gridid2 y eci22 22 4
building1 gridid2 1 gridid2 x gridid2 y eci23 19 5 select * from (
select buildingid,gridid,height,gridx,gridy,eci,total_num,row_number()over(partition by buildingid,gridid,height,gridx,gridy order by total_num desc) rn
from grid_test
group by buildingid,gridid,height,gridx,gridy,eci,total_num
) t10
where rn<=3
buildingid gridid height gridx gridy eci total_num rn
building1 gridid1 1 gridid1 x gridid1 y eci10 123 1
building1 gridid1 1 gridid1 x gridid1 y eci14 78 2
building1 gridid1 1 gridid1 x gridid1 y eci13 50 3
building1 gridid2 1 gridid2 x gridid2 y eci21 98 1
building1 gridid2 1 gridid2 x gridid2 y eci24 87 2
building1 gridid2 1 gridid2 x gridid2 y eci25 78 3 truncate table grid_test;
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci10',123);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci11',2);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci12',19);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci12',19);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci13',50);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci14',78);
insert into grid_test values('building1','gridid1',1,'gridid1 x','gridid1 y','eci14',78);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci21',98);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci22',22);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci23',19);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci24',87);
insert into grid_test values('building1','gridid2',1,'gridid2 x','gridid2 y','eci25',78); select t10.buildingid,t10.gridid,t10.height,t10.gridx,t10.gridy,
t10.cell1,t10.cell1_mrcount,
t11.cell2,t11.cell2_mrcount,
t12.cell3,t12.cell3_mrcount
from
(
select buildingid,gridid,height,gridx,gridy,eci as cell1,total_num cell1_mrcount from
(
select * from
(
select buildingid,gridid,height,gridx,gridy,eci,total_num,row_number()over(partition by buildingid,gridid,height,gridx,gridy order by total_num desc) rn
from grid_test
group by buildingid,gridid,height,gridx,gridy,eci,total_num
) t10
where rn<=3
) t where rn=1
) t10
inner join
(
select buildingid,gridid,height,gridx,gridy,eci as cell2,total_num cell2_mrcount from (
select * from (
select buildingid,gridid,height,gridx,gridy,eci,total_num,row_number()over(partition by buildingid,gridid,height,gridx,gridy order by total_num desc) rn
from grid_test
group by buildingid,gridid,height,gridx,gridy,eci,total_num
) t10
where rn<=3
) t where rn=2
) t11 on t10.gridid=t11.gridid and t10.height=t11.height
inner join
(
select buildingid,gridid,height,gridx,gridy,eci as cell3,total_num cell3_mrcount from (
select * from (
select buildingid,gridid,height,gridx,gridy,eci,total_num,row_number()over(partition by buildingid,gridid,height,gridx,gridy order by total_num desc) rn
from grid_test
group by buildingid,gridid,height,gridx,gridy,eci,total_num
) t10
where rn<=3
) t where rn=3
) t12 on t10.gridid=t12.gridid and t10.height=t12.height buildingid gridid height gridx gridy cell1 cell1_mrcount cell2 cell2_mrcount cell3 cell3_mrcount
building1 gridid1 1 gridid1 x gridid1 y eci10 123 eci14 78 eci13 50
building1 gridid2 1 gridid2 x gridid2 y eci21 98 eci24 87 eci25 78

数据库“行专列”操作---使用row_number()over(partition by 分组字段 [order by 排序字段])的更多相关文章

  1. hive:数据库“行专列”操作---使用collect_set/collect_list/collect_all & row_number()over(partition by 分组字段 [order by 排序字段])

    方案一:请参考<数据库“行专列”操作---使用row_number()over(partition by 分组字段 [order by 排序字段])>,该方案是sqlserver,orac ...

  2. 去重 ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN

    关键字  ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN 按照分组字段进行排序并标编号 ROW_NUMBER() OVER(PARTITIO ...

  3. 【SQL】ROW_NUMBER() OVER(partition by 分组列 order by 排序列)用法详解+经典实例

    #用法说明 select row_number() over(partition by A order by B ) as rowIndex from table A :为分组字段 B:为分组后的排序 ...

  4. oracle ROW_NUMBER() OVER(PARTITION BY '分组' ORDER BY '排序' DESC) 用法

    转载:https://blog.csdn.net/dbagaoshou/article/details/51330829 SELECT * FROM ( SELECT ROW_NUMBER() OVE ...

  5. SELECT a.loginname,a.deviceid,a.time,Row_Number() OVER (partition by a.loginname ORDER BY a.deviceid desc,a.time asc) rank

    现在做一个反欺诈内容要用到笛卡尔积,用来分析用户一个手机号,对应的多个设备,每个更换设备的时间,这里取的时间是系统收集时间,用来代表更换的时间, 所以要先对设备换的时间作排序,然后进行rank,最后求 ...

  6. row_number() over partition by 分组聚合

    分组聚合,就是先分组再排序,可以的话顺手标个排名:如果不想分组也可以排名:如果不想分组同时再去重排名也可以 ROW_NUMBER() OVER( [PARTITION BY column_1, col ...

  7. sql 分组取最新的数据sqlserver巧用row_number和partition by分组取top数据

    SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...

  8. row_number和partition by分组取top数据

    分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系统中取出每个学科前3名的学生.这种查询在SQL Server 2005之前,写起来很繁琐,需要用到临时表关联查询才能取到.SQL Serve ...

  9. MYSQL-实现分组排序 对比 ORACLE 和SQLserver用 row_number() over(partition by ) 分组排序功能

    以下是个人笔记: 本文是为了理解 row_number() over(partition by )  和实现各种数据库的分组排序功能 select ROW_NUMBER()over( partitio ...

随机推荐

  1. css实现div中图片高度自适应并与父级div宽度一致

    需求:1.父级div不设置高度 2.图片高度自适应,并且显示为正方形: 以前遇到列表中图片高度必须和父级宽度相同,并且需要为正方形的时候,最开始的方法是定死图片高度,这样会导致不同分辨率下图片会压缩, ...

  2. 06_java 时间获取练习_Date\SimpleDateFormat\Calendar类练习

     1.获取当前的日期,并把这个日期转换为指定格式的字符串,如2088-08-08 08:08:08 import java.text.SimpleDateFormat; import java.uti ...

  3. 【CSS】 CSS基础知识 属性和选择

    css基础知识 html的基本标签都是千篇一律的,为了能够个性化外观,就需要进行样式的调整,而css就是专门用来维护,管理样式的一种格式.在html中定义css有三种方法 1. 为标签添加style属 ...

  4. java 打印近似圆

    只要给定不同半径,圆的大小就会随之发生改变近似圆如图 设半径为r,圆心为(r,r). 由勾股定理 易得y = r -√(2*r*x-x*x) 此处注意x+=2.因为打印窗口上一行2个字节的宽度与一列的 ...

  5. Struts2 之 Action 类访问 WEB 资源

    接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 web 资源 所 ...

  6. Beta第二天

    听说

  7. C语言博客作业—嵌套循环

    一.PTA实验作业 题目1:7-4 换硬币 1. 本题PTA提交列表 2. 设计思路 (1)定义整型变量money表示待换的零钱总额,p5表示5分硬币的数量,p2表示2分硬币的数量,p1表示1分硬币的 ...

  8. C语言博客作业—函数

    一.PTA实验作业 题目1:使用函数输出水仙花数 1. 本题PTA提交列表 2. 设计思路 (1)首先定义函数narcissistic(number)判断number是否为水仙花数: (2)narc用 ...

  9. c语言字符类型作业

    一.PTA实验作业 题目1:7-2 统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 1.定义整形变量i=0,count=0,flag. 2.定义数组str[999] 3.输入str[ ...

  10. Beta敏捷冲刺每日报告——Day1

    1.情况简述 Beta阶段Scrum Meeting 敏捷开发起止时间 2017.11.2 00:00 -- 2017.11.3 00:00 讨论时间地点 2017.11.2 晚9:30,电话会议会议 ...