Home [SQL] 取得前N筆資料 (Top、Top * Percent、With Ties)
Post
Cancel

[SQL] 取得前N筆資料 (Top、Top * Percent、With Ties)

  • TOP:指定筆數
  • TOP * PERCENT :指定百分比
  • WITH TIES: 加上with ties包括相同值
    • top 5 with ties
    • top 10 percent with ties
1
2
TOP (expression) [PERCENT]  
    [ WITH TIES ]  

Top

取得前 N 筆資料

1
2
3
--以販賣單價排序商品清單(降幕),並取得前5筆
select top 5 * from 商品清單
order by 販賣單價 desc

執行結果:

1
2
3
4
5
6
商品ID	商品名稱	群組名稱	進貨單價	販賣單價
2	筆記型電腦	電腦主機	299000	270000
1	桌上型電腦	電腦主機	130000	180000
5	15吋液晶螢幕	周邊設備	130000	120000
4	19吋螢幕	周邊設備	104000	95000
6	數位相機	周邊設備	50000	70000

Top * Percent

取得前 N% 筆資料

1
2
3
--以販賣單價排序商品清單(降幕),並取得前20%筆資料
select top 20 percent * from 商品清單
order by 販賣單價 desc

執行結果:

1
2
3
4
商品ID	商品名稱	群組名稱	進貨單價	販賣單價
2	筆記型電腦	電腦主機	299000	270000
1	桌上型電腦	電腦主機	130000	180000
5	15吋液晶螢幕	周邊設備	130000	120000

With Ties (包括相同值)

WITH TIES: 加上with ties包括相同值

  • top 5 with ties
  • top 10 percent with ties

範例: Top n With Ties

取得販賣數量最高的前3筆資料

1
2
3
4
5
6
7
--取得販賣數量最高的前3筆資料
select top 3 * from [dbo].[販賣資料]
order by 數量 desc

--取得販賣數量最高的前3筆資料(包含相同值)
select top 3 with ties * from [dbo].[販賣資料]
order by 數量 desc

執行結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 3筆資料 */
傳票編號	列編號	處理日	商品ID	負責人ID	顧客ID	數量
9	1	2006-05-25 00:00:00.000	5	1	2	5
13	1	2006-06-15 00:00:00.000	9	2	5	5
1	2	2006-04-06 00:00:00.000	4	1	2	3


/* 加上with ties後,有5筆資料,相同值也會列出來 */
傳票編號	列編號	處理日	商品ID	負責人ID	顧客ID	數量
9	1	2006-05-25 00:00:00.000	5	1	2	5
13	1	2006-06-15 00:00:00.000	9	2	5	5
1	1	2006-04-06 00:00:00.000	1	1	2	3
1	2	2006-04-06 00:00:00.000	4	1	2	3
5	1	2006-05-08 00:00:00.000	3	2	1	3

範例: Top * Percent With Ties

取得販賣數量最高的前20%筆資料

1
2
3
4
5
6
7
--前20%的資料(只列出四筆)
select top 20 percent * from [dbo].[販賣資料]
order by 數量 desc

--加上with ties後,販賣數量相同的也會列出來(列出5筆)
select top 20 percent with ties * from [dbo].[販賣資料]
order by 數量 desc

執行結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* top 20 percent  */
傳票編號	列編號	處理日	商品ID	負責人ID	顧客ID	數量
9	1	2006-05-25 00:00:00.000	5	1	2	5
13	1	2006-06-15 00:00:00.000	9	2	5	5
1	1	2006-04-06 00:00:00.000	1	1	2	3
1	2	2006-04-06 00:00:00.000	4	1	2	3

/* top 20 percent with ties */
傳票編號	列編號	處理日	商品ID	負責人ID	顧客ID	數量
9	1	2006-05-25 00:00:00.000	5	1	2	5
13	1	2006-06-15 00:00:00.000	9	2	5	5
1	1	2006-04-06 00:00:00.000	1	1	2	3
1	2	2006-04-06 00:00:00.000	4	1	2	3
5	1	2006-05-08 00:00:00.000	3	2	1	3

MSDN - TOP (Transact-SQL)

This post is licensed under CC BY 4.0 by the author.