作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [SQL ] ROW_NUMBER()的用法
时间Wed Jul 25 19:30:38 2012
: : 2.第二个范例少了PARTITION BY A
: : 那麽当重复出现值的时候
: : 又是怎麽给1~9值??
: row_number() 只是单纯地标注行号,如果处理重复值,请改用
: rank() 或 dense_rank() 函数,两者的差别在於 dense_rank()
: 一定连号,以下列例子来说,97是第三好成绩
...
推 s66449:您好 感谢您的回答 不过第2点 还是没有回到我想要的问题?? 07/25 17:20
→ s66449:想确认一下相同的栏位的话 顺号是怎麽决定的 07/25 17:21
→ s66449:您举的例子只有两个栏位 顺号都是2比较没甚麽差别 07/25 17:21
→ s66449:但如果再更多栏位的话 那会怎麽排呢 07/25 17:22
什麽是「相同的栏位」? 还有,请问您之前有先问到多个栏位吗? :)
再说详细一点了,row_number()只会按照视觉上出现的次序编上列号,
rank() 与 dense_rank() 才会处理相同栏位值的情况,从而出现相同
名次编号的情况。
→ s66449:您举的例子只有两个栏位 顺号都是2比较没甚麽差别 07/25 17:21
→ s66449:但如果再更多栏位的话 那会怎麽排呢 07/25 17:22
至於内容重复,如何排列,那就是你的问题了,爱怎麽排,由你决定,
更明确地讲,由你给的 order by 决定。例如,总分一样,由国文成绩
决定。
顺序决定了,名次也就出来了。
以这次我提的例子,再加上你现在追问的多重栏位,就有可能是这样:
select ..., rank() over (order by (score * 100 + 国文成绩)) as 名次, ...
select ...,
rank() over (partition by 班级, order by (score * 100 + 国文成绩)) as 名次,
...
当然啦! 这只是举例。不过,你一定看得出来,顺序与名次,由 order by
决定。因此,「那会怎麽排呢」 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.252.126.60
1F:推 s66449:不好意思 问的不是很清楚 还让您又特别回了一篇 07/25 19:53
2F:→ s66449:真是受教了~~谢谢 07/25 19:53