求一个分组排序的SQL

justjyq 2008-11-26 10:12:49
有2个TABLE(TABLEA,TABLEB) TABLEA里面有A,B,C 3列 TABLEB里面有E,F两列 TABLEA.A=TABLEB.E
得到:关于B,C,F分组后得到最大的20笔A
请问SQL怎么下
...全文
76 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yonghengdizhen 2008-11-26
  • 打赏
  • 举报
回复
用row_number()和rank()在排序关键字不唯一的情况下,结果是不一样的.
row_number()为每一个排序关键字在组内返回唯一值.
而rank()则会出现相同排名的结果.且,所有返回序号并不连续
DENSE_RANK()和rank()类似,不过其序号保持连续.
是否需要为相同关键字得到同样的排序位置,就取决于业务需求了.
justjyq 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 icss_zhen 的回复:]
SQL code
--上面代码可简化下
select a
from ((select a,
b,
c,
e,
f,
row_number() over(partition by b, c, f order by a desc) rn
from tableA, tableB
where TABLEA.A = TABLEB.E))
where rn <= 20;
[/Quote]
row_number()?
是RANK()吗?
我不熟悉这个函数,不知道是否:rank() over(partition by b, c, f order by a desc) rn 会对b、c、f进行分组之后的结果,每组根据A的DESC排序?


icss_zhen 2008-11-26
  • 打赏
  • 举报
回复

--上面代码可简化下
select a
from ((select a,
b,
c,
e,
f,
row_number() over(partition by b, c, f order by a desc) rn
from tableA, tableB
where TABLEA.A = TABLEB.E))
where rn <= 20;
icss_zhen 2008-11-26
  • 打赏
  • 举报
回复

--lz试下,我没试
select a from(
(select a,row_number() over(partition by b,c,f order by a desc) rn from
(select a,b,c,e,f from tableA,tableB where TABLEA.A=TABLEB.E)))
where rn<=20;
vc555 2008-11-26
  • 打赏
  • 举报
回复
你用具体数据列出表里的数据和你想要的结果。
justjyq 2008-11-26
  • 打赏
  • 举报
回复
应该是说:得到每组A最大的20笔记录
justjyq 2008-11-26
  • 打赏
  • 举报
回复
是要子查询,但是可以用MAX()什么的找到每组中最大的一个,难结合ORDER BY,ROWNUM把最大的20弄出来...
yonghengdizhen 2008-11-26
  • 打赏
  • 举报
回复
用group by的话可能需要结合子查询.
justjyq 2008-11-26
  • 打赏
  • 举报
回复
我知道怎么写了,也知道row_number()和rank()的区别了,我想再问下,纯粹用ORDER BY 和GROUP BY能实现吗?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧