作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [SQL ] ROW_NUMBER()的用法
时间Wed Jul 25 15:07:12 2012
※ 引述《s66449 (老实样)》之铭言:
: -- 仅仅使用ROW_NUMBER() OVER的结果
: SELECT *,ROW_NUMBER() OVER(ORDER BY A DESC)NUM FROM TESTDB
: A B NUM
: ------------------------
: A3 B7 1
: A3 B3 2
: A3 B4 3
: A2 B4 4
: A2 B5 5
: A2 B6 6
: A1 B1 7
: A1 B2 8
: A1 B3 9
: 可以看到它只是单纯标出了行号。
: 1.想请问这两个范例都是ORDER BY A DESC
: 为什麽第一个范例是从A1排到A3
: 而第二个范例是从A3排到A1??
因为你的 「ORDER BY」 有注记 DESC,所以,递减排列。
有 「partition by」,会先形成区段再各区段「order by」;
没有「partition by」,就等同於全部资料构成一区。
: 2.第二个范例少了PARTITION BY A
: 那麽当重复出现值的时候
: 又是怎麽给1~9值??
row_number() 只是单纯地标注行号,如果处理重复值,请改用
rank() 或 dense_rank() 函数,两者的差别在於 dense_rank()
一定连号,以下列例子来说,97是第三好成绩。
id score rank() dense_rank() row_number()
1 100 1 1 1
2 98 2 2 2
3 98 2 2 3
4 97 4 3 4
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 112.104.154.124
1F:推 s66449:您好 感谢您的回答 不过第2点 还是没有回到我想要的问题?? 07/25 17:20
2F:→ s66449:想确认一下相同的栏位的话 顺号是怎麽决定的 07/25 17:21
3F:→ s66449:您举的例子只有两个栏位 顺号都是2比较没甚麽差别 07/25 17:21
4F:→ s66449:但如果再更多栏位的话 那会怎麽排呢 07/25 17:22