日韩小视频-日韩久久一区二区三区-日韩久久一级毛片-日韩久久久精品中文字幕-国产精品亚洲精品影院-国产精品亚洲欧美云霸高清

下載吧 - 綠色安全的游戲和軟件下載中心

軟件下載吧

當前位置:軟件下載吧 > 數據庫 > MS_SQL > SQL基礎:sql?server?累計求和實現代碼

SQL基礎:sql?server?累計求和實現代碼

時間:2024-02-09 10:40作者:下載吧人氣:13

看了一眼自關聯,沒搞懂,試了一下也沒成功。

over方式一下結果就出來了,好用。

/*
需求:累計求和六種算法效率比較
作者:felix
日期:2020-06-23

*/
–第一步,準備測試數據
–IF OBJECT_ID(N’dbo.t’) IS NOT NULL
— DROP TABLE dbo.t;
–GO
–CREATE TABLE dbo.t
–(
— i BIGINT IDENTITY(1, 1) PRIMARY KEY,
— d MONEY
–);
–INSERT t
— d
–)
–SELECT TOP 31465
— ROUND(10000 * RAND(CHECKSUM(NEWID())), 2)
–FROM sys.all_objects AS a
— CROSS JOIN sys.all_objects;
—-第二步,創建記錄時間的表格
–IF OBJECT_ID(N’dbo.record_time’) IS NOT NULL
— DROP TABLE dbo.record_time;
–CREATE TABLE dbo.record_time
— i INT IDENTITY PRIMARY KEY,
— 算法 NVARCHAR(10),
— bt DATETIME2,–開始時間
— et DATETIME2,–結束時間
— idiff AS DATEDIFF(ms, bt, et)–所用的毫秒數
–第一種方法,自連接法,sql server 2008以上版本測試通過,157255661.40
SET STATISTICS TIME OFF;
SET STATISTICS IO OFF;
GO
DECLARE @bt DATETIME2 = GETDATE();
SELECT a.i,
a.d,
SUM(b.d) AS total_sum
FROM dbo.t AS a
INNER JOIN dbo.t AS b
ON b.i <= a.i
GROUP BY a.i,
a.d;
DECLARE @et DATETIME2 = GETDATE();
INSERT INTO dbo.record_time
(
算法,
bt,
et
)
VALUES
(‘自連接’, @bt, @et);
–ORDER BY a.i;
;
–第二種方法,遞歸,sql server 2008以上版本測試通過,157255661.40
WITH cte_total_sum
AS (SELECT i,
d,
d AS total_sum
FROM dbo.t
WHERE i = 1
UNION ALL
SELECT s.i,
s.d,
p.total_sum + s.d AS total_sum
FROM dbo.t AS s
INNER JOIN cte_total_sum AS p
ON s.i – 1 = p.i)
SELECT *
FROM cte_total_sum
OPTION (MAXRECURSION 0);
(‘遞歸’, @bt, @et);
–第三種方法,over 子句,sql server 2012測試通過,sql server 2008不支持,157255661.40
SELECT i,
d,
SUM(d) OVER (ORDER BY i) AS total_sum
FROM dbo.t;
(‘over子句’, @bt, @et);
–第四種,相關子查詢,sql server 2008以上版本測試通過,156625045.22
SELECT outquery.i,
outquery.d,
(
SELECT SUM(innerq.d) FROM dbo.t AS innerq WHERE innerq.i <= outquery.i
) AS ct –內部查詢
FROM dbo.t AS outquery;
(‘相關子查詢’, @bt, @et);
–ORDER BY outquery.i; –外部查詢
–游標方法,有兩種方法可以實現,一種是臨時表更新,一種是變量疊加更新,157255661.40
–先增加一個存儲累計和的列
–第5種,游標_臨時表更新
–ALTER TABLE dbo.t ADD total_d MONEY DEFAULT (0);–只運行一次
DECLARE @t TABLE –定義表變量,存儲累計求和臨時結果
i INT PRIMARY KEY IDENTITY,
d MONEY,
total_d MONEY
);
DECLARE @i INT = 0,
@d MONEY = 0,
@total_d MONEY = 0;
DECLARE c1 CURSOR FOR SELECT i, d FROM dbo.t ORDER BY i;
OPEN c1;
FETCH c1
INTO @i,
@d;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @total_d += @d;
INSERT INTO @t
(
d,
total_d
)
VALUES
(@d, @total_d);
FETCH c1
INTO @i,
@d;
END;
CLOSE c1;
DEALLOCATE c1;
UPDATE dbo.t
SET total_d = b.total_d
INNER JOIN @t AS b
ON a.i = b.i;
(‘游標_臨時表更新’, @bt, @et);
–第6種,游標_變量疊加更新
DECLARE c1 CURSOR FOR SELECT i, d FROM dbo.t; –ORDER BY i;
UPDATE dbo.t
SET total_d = @total_d
WHERE i = @i;
(‘游標_變量疊加更新’, @bt, @et);
–執行時間 over子句<游標臨時表更新<游標變量疊加更新<自連接<相關子查詢<遞歸查詢

標簽MSSQL,SQLServer,技術文檔,數據庫,SQLSERVER

相關下載

查看所有評論+

網友評論

網友
您的評論需要經過審核才能顯示

熱門閱覽

最新排行

公眾號

主站蜘蛛池模板: 久久毛片免费看一区二区三区 | 一级做a爰性色毛片免费 | www.久草.com| 色www永久免费 | 日本japanesevideo黑人 | 久久精品视频8 | 91精品免费久久久久久久久 | 国产精品国三级国产aⅴ | 久久久www成人免费精品 | 久久福利青草精品资源站 | 日韩美女免费视频 | 中文字幕国产欧美 | 67194午夜| 日本在线观看不卡免费视频 | 日韩欧美不卡在线 | 在线日本看片免费人成视久网 | 自拍视频在线观看视频精品 | 美女在线看永久免费网址 | 多人伦精品一区二区三区视频 | 美女视频网站永久免费观看软件 | 国产亚洲精品午夜一区 | 亚洲欧美久久一区二区 | 真实国产乱人伦在线视频播放 | 欧美一级特毛片 | 成人免费大片黄在线观看com | 成人毛片网站 | 免费亚洲视频 | 国产精品外围在线观看 | 国产一区二区三区毛片 | 三级黄色高清视频 | 免费看欧美一级特黄a毛片 免费看片aⅴ免费大片 | 欧美5g影院天天爽天天看 | 免费一级a毛片 | 18年大片免费在线 | 日韩成人中文字幕 | 久久国产欧美日韩精品 | 一级毛片在线不卡直接观看 | 中文字幕亚洲一区 | 性感一级毛片 | 国产成人亚洲精品久久 | 手机在线观看精品国产片 |