当前位置: 代码迷 >> Oracle开发 >> 求好手编写sql,感谢感谢!
  详细解决方案

求好手编写sql,感谢感谢!

热度:135   发布时间:2016-04-24 06:26:26.0
求高手编写sql,感谢感谢!!!
表如下:
     


需求:
     查询出总数为10条数据(点击数最大的前十条),其中名称重复的取一条(取点击数大的一条,如名称1、名称5)。  

     
------解决思路----------------------
SQL> with  mytab (ID,name,address,cnt,remark)
  2  as
  3  (
  4  select 1,'名称1','湖南长沙',100,'备注' from dual
  5  union all
  6  select 2,'名称1','湖南长沙',88,'备注' from dual
  7  union all
  8  select 3,'名称2','湖南长沙',77,'备注' from dual
  9  union all
 10  select 4,'名称3','湖南长沙',66,'备注' from dual
 11  union all
 12  select 5,'名称4','湖南长沙',55,'备注' from dual
 13  union all
 14  select 6,'名称5','湖南长沙',90,'备注' from dual
 15  union all
 16  select 7,'名称5','湖南长沙',88,'备注' from dual
 17  union all
 18  select 8,'名称6','湖南长沙',77,'备注' from dual
 19  union all
 20  select 9,'名称7','湖南长沙',66,'备注' from dual
 21  union all
 22  select 10,'名称8','湖南长沙',77,'备注' from dual
 23  union all
 24  select 11,'名称9','湖南长沙',66,'备注' from dual
 25  union all
 26  select 12,'名称10','湖南长沙',77,'备注' from dual
 27  union all
 28  select 13,'名称11','湖南长沙',66,'备注' from dual
 29  union all
 30  select 14,'名称12','湖南长沙',77,'备注' from dual
 31  union all
 32  select 15,'名称13','湖南长沙',66,'备注' from dual
 33  union all
 34  select 16,'名称14','湖南长沙',77,'备注' from dual)
 35  select id, name, address, cnt, remark
 36    from (select row_number() over(partition by name order by cnt desc) rn,
 37                 mytab.*
 38            from mytab
 39           order by cnt desc)
 40   where rn = 1
 41     and rownum <= 10;

        ID NAME   ADDRESS         CNT REMA
---------- ------ -------- ---------- ----
         1 名称1  湖南长沙        100 备注
         6 名称5  湖南长沙         90 备注
        16 名称14 湖南长沙         77 备注
        14 名称12 湖南长沙         77 备注
        12 名称10 湖南长沙         77 备注
         3 名称2  湖南长沙         77 备注
        10 名称8  湖南长沙         77 备注
         8 名称6  湖南长沙         77 备注
        15 名称13 湖南长沙         66 备注
        13 名称11 湖南长沙         66 备注

已选择10行。
  相关解决方案