婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SqlServer 2005的排名函數使用小結

SqlServer 2005的排名函數使用小結

熱門標簽:江西穩定外呼系統供應商 電話機器人錄音師薪資 智能電銷機器人教育 中國地圖標注省份用什么符號 孝感銷售電銷機器人廠家 高德地圖標注電話怎么沒了 奧維地圖標注字體大小修改 無錫梁溪公司怎樣申請400電話 北京智能外呼系統供應商家
盡管從技術上講,其它排名函數的計算與ROW_NUMBER類似,但它們的的實際應用卻少很多。RANK和DENSE——RANK主要用于排名和積分。NTILE更多地用于分析。

先創建一個示例表:

復制代碼 代碼如下:

SET NOCOUNT ON
USE [tempdb]
IF OBJECT_ID('Sales')IS NOT NULL
DROP TABLE sales

CREATE TABLE Sales
(
empid VARCHAR(10) NOT NULL PRIMARY KEY,
mgrid VARCHAR(10) NOT NULL,
qty INT NOT NULL
)

INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('A','Z',300)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('B','X',100)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('C','X',200)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('D','Y',200)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('E','Z',250)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('F','Z',300)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('G','X',100)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('H','Y',150)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('I','X',250)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('J','Z',100)
INSERT INTO [Sales] (empid,[mgrid],[qty])VALUES('K','Y',200)

CREATE INDEX idx_qty_empid ON [Sales](qty,empid)
CREATE INDEX idx_mgrid_qty_empid ON sales(mgrid,qty,empid)

--
SELECT * FROM [Sales]


復制代碼 代碼如下:

--排名函數
/**/

--Sql Server 2005排名函數只能用于查詢的SELECT 和 ORDER BY 子句中。排名計算(無論你使用什么方法)的最佳索引是在分區列、排序列、覆蓋列上創建的索引。
--行號:是指按指定順序為查詢結果集中的行分配的連續整數。在后面的節中,將描述Sql Server 2005與之前版本中計算行號的工具與方法。
SELECT empid,qty,ROW_NUMBER()OVER(ORDER BY qty)AS RowNum
FROM [Sales]
ORDER BY [qty]
--確定性
SELECT empid,qty,ROW_NUMBER()OVER(ORDER BY qty)AS RowNum,ROW_NUMBER()OVER(ORDER BY qty,empid)AS RowNum2
FROM [Sales]
ORDER BY qty,empid
--分區
SELECT mgrid,empid,qty,ROW_NUMBER()OVER(PARTITION BY mgrid ORDER BY qty,empid)AS RowNum
FROM [Sales]
ORDER BY mgrid,qty
--=====之前2000版本基于集合的方法實現
--唯一排序列:給定一個唯一的分區 + 排序列組合 (如下例的唯一的分區是empid,排序列empid
SELECT empid,(SELECT COUNT(*) FROM [Sales] AS s2 WHERE s2.empid=s1.empid)AS rowNum
FROM [Sales] s1 ORDER BY [empid]
--查看執行計劃,(順序是從上至下,從右至左看)會發現有兩個不同的運算符使用了聚集索引。第一個是完整掃描以返回所有的行(這個例子是11行);第二個運算符先為每個外部執行查找,再執行局部掃描,以完成統計。還記得嗎?影響數據處理查詢性能的主要因素通常中I/O。這種方式在小數據量時不明顯,但當數據量較大時(大于千條),由于每一條記錄都需要將全部表掃描一次,使用這種方法掃描的總行數將是1+2+3+N,對于整體上100000行的表,你一共會掃描50005000行。順便提一下,計算前N個正整數之各的公式是(N+N的平方)/2。
--看示例即了解到的.
USE [AdventureWorks]
SET STATISTICS TIME ON
SELECT salesorderid,ROW_NUMBER()OVER(ORDER BY salesorderid)AS rownum
FROM sales.[SalesOrderHeader]

SELECT salesorderid,(SELECT COUNT(*) FROM sales.[SalesOrderHeader] b WHERE b.salesorderid=a.salesorderid)AS rownum
FROM sales.[SalesOrderHeader] a
ORDER BY [salesorderid]

/* 結果:
(31465 行受影響)

SQL Server 執行時間:
CPU 時間 = 47 毫秒,占用時間 = 674 毫秒。

(31465 行受影響)

SQL Server 執行時間:
CPU 時間 = 133094 毫秒,占用時間 = 134030 毫秒。

可想而知,新排名函數的憂化方面是很不錯的.
*/

--不唯一排序列和附加屬性:當排序列不唯一時,你可以通過引入一個附加屬性使它唯一。以下查詢按qty和empid的順序生成行號
SELECT empid,qty,(SELECT COUNT(*) FROM [Sales] s2 WHERE s2.qtys1.qty OR ((s2.qty=s1.qty AND s2.empid=s1.empid)))AS rowNum
FROM [Sales] s1 ORDER BY qty,empid
--以上示例qty為排序列,empid為附加列。要統計具有相同或更小排序列表值(qty+empid)的行,在子查詢中使用以下表達式
--inner_qty outer_qty OR (inner_qty=outer_qty AND inner_empid = outer_empid)

--沒有附加屬性的不唯一序列:當你要根據不唯一排序列分配行號,而且不使用附加屬性時,在SQL Server 2005之前的版本中用基于集合的方法解決該問題就更復雜了。通過以下代碼清單創建并填充該表。
IF OBJECT_ID('T1')IS NOT NULL
DROP TABLE T1

CREATE TABLE T1(col1 VARCHAR(5))
INSERT INTO t1(col1) VALUES('A')
INSERT INTO t1(col1) VALUES('A')
INSERT INTO t1(col1) VALUES('A')
INSERT INTO t1(col1) VALUES('B')
INSERT INTO t1(col1) VALUES('B')
INSERT INTO t1(col1) VALUES('C')
INSERT INTO t1(col1) VALUES('C')
INSERT INTO t1(col1) VALUES('C')
INSERT INTO t1(col1) VALUES('C')
INSERT INTO t1(col1) VALUES('C')
--該解決方案必須兼容SQL Server 2000,所以你不能使用ROW_NUMBER函數。而且,此方案必須是標準的。
--在這個解決方案中,將第一次使用一個非常重要的關鍵技術--用數字輔助表生成副本。以下創建Nums表并用l=n=1000000之內的1000000個整數填充該表。
--第一步是,通過按col對行分組來“壓縮”數據,為每個組返回重復數(該組中的行數),還要用子查詢返回基表中具有最小排序值的行數。
SELECT col1,COUNT(*) AS dups,(SELECT COUNT(*) FROM [T1]B WHERE b.col1a.col1)AS smaller FROM [T1]A GROUP BY [col1]
--下一步是擴展行數,即,為每一行創建連續編號的副本。
SELECT col1,dups,smaller,n FROM (
SELECT col1,COUNT(*) AS dups,(SELECT COUNT(*) FROM [T1]B WHERE b.col1a.col1)AS smaller FROM [T1]A GROUP BY [col1]) AS D, Nums
WHERE n=[dups]
--觀察上表的結果,理解它是如何產生行號的。
--行號可以表示為,具有更小排序值的行數加上同一排序值組內的行號,即 N + smaller。下面列出最終解決方案。
SELECT n+smaller AS rowNum, col1 FROM (
SELECT col1,COUNT(*) AS dups,(SELECT COUNT(*) FROM [T1]B WHERE b.col1a.col1)AS smaller FROM [T1]A GROUP BY [col1]) AS D, Nums
WHERE n=[dups]
ORDER BY [rowNum]

--創建一個填充了100W行數的Nums表
GO
IF OBJECT_ID('dbo.Nums') IS NOT NULL
DROP TABLE dbo.Nums;
GO
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 1000000;
SET @rc = 1;

INSERT INTO Nums VALUES(1);
WHILE @rc * 2 = @max
BEGIN
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
END

INSERT INTO dbo.Nums
SELECT n + @rc FROM dbo.Nums WHERE n + @rc = @max;
GO

--在生產環境中也是有用的,例可能常用到的,數據分頁.
CREATE PROC usp_GetPage @iRowCount INT ,@iPageNo INT
AS
SELECT * FROM (
SELECT ROW_NUMBER()OVER(ORDER BY productid ASC)RowNum,* FROM production.product)OrderData
WHERE RowNum BETWEEN @iRowCount*(@iPageNo-1)+1 AND @iRowCount*@iPageNo
ORDER BY [ProductID] ASC
GO

-- 使用
EXEC usp_getpage 10,20
您可能感興趣的文章:
  • SQL2005 四個排名函數(row_number、rank、dense_rank和ntile)的比較
  • SQL查詢排名函數實例
  • 實例講解sql server排名函數DENSE_RANK的用法
  • sql四大排名函數之ROW_NUMBER、RANK、DENSE_RANK、NTILE使用介紹

標簽:通化 海北 阜陽 齊齊哈爾 臨滄 那曲 荊州 泰州

巨人網絡通訊聲明:本文標題《SqlServer 2005的排名函數使用小結》,本文關鍵詞  SqlServer,2005,的,排名,函數,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SqlServer 2005的排名函數使用小結》相關的同類信息!
  • 本頁收集關于SqlServer 2005的排名函數使用小結的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人综合在线网站| 亚洲综合偷拍欧美一区色| 国产成人自拍网| 欧美日韩www| 一区二区久久久| 91蜜桃视频在线| 国产精品美女久久久久aⅴ国产馆| 一区二区三区高清在线| 韩国女主播成人在线| 精品福利在线导航| 国产成人三级在线观看| 久久久久国产一区二区三区四区| 亚洲黄色性网站| 欧美综合一区二区| 国产精品高清亚洲| 99久久免费精品| 国产欧美一区在线| 99re66热这里只有精品3直播 | 亚洲欧美日韩国产中文在线| 国产激情一区二区三区四区| 久久久国际精品| 欧美日本一区二区| av一区二区三区| 美国毛片一区二区三区| 中文字幕一区二区三区av| 欧美在线免费观看视频| 日韩一区精品字幕| 在线播放国产精品二区一二区四区 | 国产精品一区二区黑丝| 国产精品天美传媒| 精品国产露脸精彩对白| 欧美私人免费视频| 成人黄色777网| 日韩黄色在线观看| 一区二区三区高清在线| 精品国产一区a| 在线播放欧美女士性生活| 不卡一区中文字幕| 国产v综合v亚洲欧| 伊人开心综合网| 亚洲欧洲性图库| 国产视频一区二区三区在线观看| 色综合天天狠狠| 色综合欧美在线视频区| 久久天天做天天爱综合色| 在线不卡中文字幕| 蜜桃视频一区二区| 亚洲欧美日本在线| 一区二区三区四区在线| 亚洲精品国产精华液| 亚洲黄色av一区| 亚洲一区二区三区精品在线| 久久久精品免费观看| 国产三级一区二区| 久久九九久久九九| 国产日产亚洲精品系列| 亚洲国产精品传媒在线观看| 日韩一区和二区| 欧美精品一区二区在线播放| 欧美激情一区二区三区不卡| 色综合色综合色综合色综合色综合 | 亚洲欧美日韩在线| 久久成人免费电影| 91在线视频免费观看| 在线亚洲人成电影网站色www| 成人动漫av在线| 在线精品视频一区二区| 日韩美女主播在线视频一区二区三区| 欧美一级在线视频| 玉米视频成人免费看| 国产一区二区三区在线观看免费| 一本到高清视频免费精品| 久久久久久久一区| 韩国精品主播一区二区在线观看 | 国产成人精品综合在线观看| 欧美无人高清视频在线观看| 久久综合国产精品| 精品一区二区三区不卡| 欧美精品在线一区二区| 综合精品久久久| 99热在这里有精品免费| 久久久激情视频| 岛国精品一区二区| 国产视频一区在线观看| 国产99一区视频免费 | 91精品国产综合久久香蕉麻豆| 亚洲一二三四区不卡| 欧美男男青年gay1069videost| 亚洲成人av资源| 久久婷婷久久一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 激情综合色播激情啊| 久久久天堂av| 99在线精品免费| 亚洲午夜视频在线观看| 色婷婷av久久久久久久| 麻豆91在线看| 亚洲免费色视频| 久久久久久夜精品精品免费| 国产成人av电影在线观看| 国产网红主播福利一区二区| 一本一道久久a久久精品综合蜜臀| 中文字幕亚洲在| 欧美精品一区二区三区久久久 | 日本欧美加勒比视频| 国产精品每日更新在线播放网址| 9人人澡人人爽人人精品| 男女性色大片免费观看一区二区| 国产欧美日韩中文久久| 在线精品国精品国产尤物884a| 国产乱子伦视频一区二区三区| 亚洲一区在线视频| 亚洲视频一区在线观看| 亚洲精品一区二区三区香蕉| 视频一区二区不卡| 久久99精品久久只有精品| 久久99精品久久久久婷婷| 国产精品乱子久久久久| 国产天堂亚洲国产碰碰| 久久嫩草精品久久久精品| 日韩小视频在线观看专区| 欧美日韩久久久一区| 欧美精品v日韩精品v韩国精品v| 91亚洲国产成人精品一区二三| 国产成人激情av| 972aa.com艺术欧美| 欧美性受极品xxxx喷水| 欧美伊人久久久久久午夜久久久久| 91免费看片在线观看| 色综合久久久久久久| 制服丝袜成人动漫| 欧美电视剧免费观看| 国产精品视频观看| 一区二区三区中文免费| 日本v片在线高清不卡在线观看| 五月婷婷久久综合| 美国十次了思思久久精品导航| 国内成+人亚洲+欧美+综合在线| 亚洲第一主播视频| 理论片日本一区| 99这里都是精品| 欧美一区二区私人影院日本| 国产精品污网站| 夜夜夜精品看看| 粉嫩13p一区二区三区| 欧美高清激情brazzers| 国产精品三级av| 国产精品一区专区| 精品国免费一区二区三区| 亚洲色图欧美在线| 99精品热视频| 国产精品久久久久久久裸模| 国产精品视频一二三| 国模大尺度一区二区三区| 91福利国产精品| 久久91精品国产91久久小草| 一级日本不卡的影视| 免费久久精品视频| 国产欧美中文在线| 日韩一区二区三区免费看 | 精品日韩一区二区三区| 成人午夜视频在线| 美女在线视频一区| 久久久美女艺术照精彩视频福利播放| 欧美三级乱人伦电影| 91国产免费看| 91精品在线免费| 欧美成人猛片aaaaaaa| 久久午夜老司机| 中文天堂在线一区| 欧美激情中文字幕一区二区| 亚洲国产精品国自产拍av| 亚洲国产精品精华液ab| 国产精品伦一区| 美国十次综合导航| 成人午夜精品一区二区三区| 日本乱人伦一区| 欧美xingq一区二区| 色婷婷香蕉在线一区二区| 精品无人码麻豆乱码1区2区 | 秋霞电影一区二区| 国产一区高清在线| 91小视频在线观看| 欧美日韩国产一二三| 欧美美女bb生活片| 日韩免费观看高清完整版| 亚洲婷婷综合色高清在线| 青青草精品视频| 色婷婷av一区二区三区大白胸 | 久久精品久久综合| 欧美在线观看一二区| 国产精品久久久久久久久动漫 | 国产精品夜夜爽| 538在线一区二区精品国产| 亚洲品质自拍视频| 成人动漫视频在线| 亚洲精品一区二区三区香蕉| 日韩高清一区二区| 欧美高清视频一二三区| 日韩在线观看一区二区|