表如下:

需求:
查询出总数为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行。