亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
什麼是窗口函數(shù)?
常見(jiàn)窗口函數(shù)及使用方法
ROW_NUMBER() , RANK() , DENSE_RANK()
SUM() , AVG() , MIN() , MAX()等聚合類窗口函數(shù)
使用窗口函數(shù)的幾個(gè)小技巧
首頁(yè) 資料庫(kù) SQL SQL窗口功能教程

SQL窗口功能教程

Jul 08, 2025 am 01:41 AM

SQL窗口函數(shù)能在不減少行數(shù)的情況下進(jìn)行高效計(jì)算。它通過(guò)OVER()定義的窗口對(duì)數(shù)據(jù)進(jìn)行排名、累計(jì)求和、分組統(tǒng)計(jì)等操作,常見(jiàn)函數(shù)包括:1. ROW_NUMBER()、RANK()、DENSE_RANK()用於排名,區(qū)別在於重複值處理;2. SUM()、AVG()等聚合類函數(shù)實(shí)現(xiàn)滾動(dòng)統(tǒng)計(jì);3. 使用PARTITION BY按維度分組,ORDER BY控制排序,幀範(fàn)圍控制窗口大小。掌握窗口函數(shù)能有效替代複雜子查詢,提升查詢效率與可讀性。

SQL window functions tutorial

SQL窗口函數(shù)其實(shí)沒(méi)有聽(tīng)起來(lái)那麼複雜,用對(duì)了能省不少事。很多人寫(xiě)查詢時(shí)喜歡嵌套子查詢或者自連接,但其實(shí)窗口函數(shù)能更優(yōu)雅地解決很多問(wèn)題,比如排名、累計(jì)求和、分組統(tǒng)計(jì)等。

SQL window functions tutorial

什麼是窗口函數(shù)?

簡(jiǎn)單說(shuō),窗口函數(shù)就是在不改變?cè)夹袛?shù)的前提下,對(duì)一組相關(guān)的行進(jìn)行計(jì)算。不像聚合函數(shù)(比如SUM()AVG() )會(huì)把多行合併成一行,窗口函數(shù)保留每一行,同時(shí)加上你想要的計(jì)算結(jié)果。

SQL window functions tutorial

常見(jiàn)場(chǎng)景比如:

  • 給每個(gè)銷售員在各自區(qū)域內(nèi)的銷售額排名
  • 計(jì)算每個(gè)訂單在其客戶歷史訂單中的平均金額
  • 獲取每個(gè)月的銷售額與上個(gè)月對(duì)比

基本語(yǔ)法是這樣的:

SQL window functions tutorial
 function_name (expression) OVER (
    [PARTITION BY partition_expression]
    [ORDER BY sort_expression]
    [frame_clause]
)

你可以把它理解成“先按什麼分組,再按什麼排序,然後在這個(gè)'窗口'裡做計(jì)算”。


常見(jiàn)窗口函數(shù)及使用方法

以下是一些最常用的窗口函數(shù)和它們的典型用途:

ROW_NUMBER() , RANK() , DENSE_RANK()

這些函數(shù)用於生成排名。區(qū)別在於遇到相同值時(shí)怎麼處理:

  • ROW_NUMBER() :不管有沒(méi)有重複值,都排不同的號(hào)
  • RANK() :有並列名次,後面會(huì)跳號(hào)
  • DENSE_RANK() :有並列名次,但不會(huì)跳號(hào)

舉個(gè)例子,假設(shè)你在查銷售數(shù)據(jù):

 SELECT 
    salesperson,
    region,
    amount,
    ROW_NUMBER() OVER (PARTITION BY region ORDER BY amount DESC) AS row_num,
    RANK() OVER (PARTITION BY region ORDER BY amount DESC) AS rank,
    DENSE_RANK() OVER (PARTITION BY region ORDER BY amount DESC) AS dense_rank
FROM sales;

你會(huì)發(fā)現(xiàn)不同排名函數(shù)的結(jié)果差異主要體現(xiàn)在並列的情況下。

SUM() , AVG() , MIN() , MAX()等聚合類窗口函數(shù)

這類函數(shù)可以做滾動(dòng)統(tǒng)計(jì),比如每月累計(jì)銷售額:

 SELECT
    month,
    sales_amount,
    SUM(sales_amount) OVER (ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sales
FROM monthly_sales;

這裡用了ROWS BETWEEN ...來(lái)控制窗口範(fàn)圍,意思是“從第一行到當(dāng)前這一行”。你也可以改成只看前3行或者前後幾行,根據(jù)需求調(diào)整。


使用窗口函數(shù)的幾個(gè)小技巧

  1. 別忘了PARTITION BY如果你不加PARTITION BY ,那整個(gè)表就當(dāng)成一個(gè)大窗口來(lái)處理。如果你要按地區(qū)、部門、用戶等維度分別統(tǒng)計(jì),記得加上。

  2. ORDER BY 很關(guān)鍵特別是在需要排名或累計(jì)的時(shí)候, ORDER BY決定了窗口內(nèi)行的順序。如果不指定,有些函數(shù)可能返回不可預(yù)測(cè)的結(jié)果。

  3. 幀範(fàn)圍(Frame Clause)可以靈活控制窗口大小比如你要計(jì)算過(guò)去7天的平均銷量,可以用類似:

     AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
  4. 避免誤用GROUP BY 和窗口函數(shù)混用有時(shí)候你會(huì)看到有人一邊用GROUP BY一邊還用窗口函數(shù),這沒(méi)問(wèn)題,但要注意理解每一步的作用。 GROUP BY是聚合,而窗口函數(shù)是“非聚合”的增強(qiáng)版。


  5. 基本上就這些。窗口函數(shù)一開(kāi)始可能會(huì)有點(diǎn)繞,但一旦掌握,你會(huì)發(fā)現(xiàn)它比一堆子查詢清晰多了。剛開(kāi)始練的時(shí)候可以從簡(jiǎn)單的排名和累計(jì)開(kāi)始,慢慢嘗試複雜的幀設(shè)置,熟練之後寫(xiě)複雜報(bào)表就會(huì)輕鬆很多。

    以上是SQL窗口功能教程的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何在SQL數(shù)據(jù)庫(kù)中找到具有特定名稱的列? 如何在SQL數(shù)據(jù)庫(kù)中找到具有特定名稱的列? Jul 07, 2025 am 02:08 AM

要查找SQL數(shù)據(jù)庫(kù)中特定名稱的列,可通過(guò)系統(tǒng)信息模式或數(shù)據(jù)庫(kù)自帶元數(shù)據(jù)表實(shí)現(xiàn)。 1.使用INFORMATION_SCHEMA.COLUMNS查詢適用於大多數(shù)SQL數(shù)據(jù)庫(kù),如MySQL、PostgreSQL和SQLServer,通過(guò)SELECTTABLE_NAME,COLUMN_NAME並結(jié)合WHERECOLUMN_NAMELIKE或=進(jìn)行匹配;2.特定數(shù)據(jù)庫(kù)可查詢系統(tǒng)表或視圖,如SQLServer使用sys.columns結(jié)合sys.tables進(jìn)行JOIN查詢,PostgreSQL則可通過(guò)inf

如何備份和還原SQL數(shù)據(jù)庫(kù) 如何備份和還原SQL數(shù)據(jù)庫(kù) Jul 06, 2025 am 01:04 AM

備份和恢復(fù)SQL數(shù)據(jù)庫(kù)是防止數(shù)據(jù)丟失和系統(tǒng)故障的關(guān)鍵操作。 1.使用SSMS可視化備份數(shù)據(jù)庫(kù),選擇完整、差異等備份類型並設(shè)置安全路徑;2.用T-SQL命令實(shí)現(xiàn)靈活備份,支持自動(dòng)化與遠(yuǎn)程執(zhí)行;3.恢復(fù)數(shù)據(jù)庫(kù)可通過(guò)SSMS或RESTOREDATABASE命令完成,必要時(shí)使用WITHREPLACE和SINGLE_USER模式;4.注意權(quán)限配置、路徑訪問(wèn)、避免覆蓋生產(chǎn)環(huán)境及驗(yàn)證備份完整性。掌握這些方法可有效保障數(shù)據(jù)安全與業(yè)務(wù)連續(xù)性。

何時(shí)使用SQL子Queries與加入進(jìn)行數(shù)據(jù)檢索。 何時(shí)使用SQL子Queries與加入進(jìn)行數(shù)據(jù)檢索。 Jul 14, 2025 am 02:29 AM

使用子查詢還是連接取決於具體場(chǎng)景。 1.當(dāng)需要提前過(guò)濾數(shù)據(jù)時(shí),子查詢更有效,如查找今日下單客戶;2.合併大規(guī)模數(shù)據(jù)集時(shí),連接效率更高,如獲取客戶及其最近訂單;3.編寫(xiě)可讀性強(qiáng)的邏輯時(shí),子查詢結(jié)構(gòu)更清晰,如查找熱銷產(chǎn)品;4.在執(zhí)行依賴關(guān)聯(lián)數(shù)據(jù)的更新或刪除操作時(shí),子查詢是首選方案,如刪除長(zhǎng)期未登錄用戶。

比較不同的SQL方言(例如MySQL,PostgreSQL,SQL Server) 比較不同的SQL方言(例如MySQL,PostgreSQL,SQL Server) Jul 07, 2025 am 02:02 AM

sqldialectsdifferinsyntaxandFunctionallity.1.StringConcatenationSconcat()inMysQL,|| orconcat()inpostgresql,and insqlserver.2.nullhandlingemploysifnull()inmysql,isnull()insqlserver,andcoalesce()communAcrossall.3.dateFunctionsVary:now(),date_format(),date_format()i

SQL和NOSQL有什麼區(qū)別 SQL和NOSQL有什麼區(qū)別 Jul 08, 2025 am 01:52 AM

SQL和NoSQL數(shù)據(jù)庫(kù)的核心區(qū)別在於數(shù)據(jù)結(jié)構(gòu)、擴(kuò)展方式和一致性模型。 1.數(shù)據(jù)結(jié)構(gòu)方面,SQL使用預(yù)定義模式的表格存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù),而NoSQL支持文檔、鍵值、列族和圖等靈活格式以處理非結(jié)構(gòu)化數(shù)據(jù);2.擴(kuò)展性上,SQL通常垂直擴(kuò)容依賴更強(qiáng)硬件,NoSQL則通過(guò)水平擴(kuò)容實(shí)現(xiàn)分佈式擴(kuò)展;3.一致性方面,SQL遵循ACID確保強(qiáng)一致性,適合金融類系統(tǒng),而NoSQL多采用BASE模型強(qiáng)調(diào)可用性和最終一致性;4.查詢語(yǔ)言方面,SQL提供標(biāo)準(zhǔn)化且強(qiáng)大的查詢能力,而NoSQL查詢語(yǔ)言多樣但不如SQL成熟統(tǒng)一,選

什麼是SQL中的複合主鍵? 什麼是SQL中的複合主鍵? Jul 08, 2025 am 01:38 AM

AcompositePrimaryKeyInsqlisaPrimaryKemposedoftWooMoreColumnSthattogetherNiqueTheThatoGetherNiquesityIdieExhrow.1.ISISUSIDWhennosingLecolumnCanensuroWiNiquness,SUSESINASTASINASTUDENT CORSENROLLMENTTABLE WHONERABLEWHERE WHONE

如何在SQL中找到第二高薪 如何在SQL中找到第二高薪 Jul 14, 2025 am 02:06 AM

找出第二高工資的核心方法有三種:1.使用LIMIT和OFFSET跳過(guò)最高工資後取最大,適用於小型系統(tǒng);2.通過(guò)子查詢排除最大值後再找MAX,兼容性強(qiáng)適合複雜查詢;3.用DENSE_RANK或ROW_NUMBER窗口函數(shù)處理並列排名,擴(kuò)展性強(qiáng)。此外,需結(jié)合IFNULL或COALESCE應(yīng)對(duì)不存在第二高工資的情況。

在SQL中使用常見(jiàn)表表達(dá)式(CTE)的優(yōu)點(diǎn)。 在SQL中使用常見(jiàn)表表達(dá)式(CTE)的優(yōu)點(diǎn)。 Jul 07, 2025 am 01:46 AM

CTEs在SQL查詢中的主要優(yōu)勢(shì)包括提高可讀性、支持遞歸查詢、避免重複子查詢和增強(qiáng)模塊化與調(diào)試能力。 1.提高可讀性:通過(guò)將復(fù)雜查詢拆分為多個(gè)獨(dú)立邏輯塊,使結(jié)構(gòu)更清晰;2.支持遞歸查詢:處理層級(jí)數(shù)據(jù)時(shí)邏輯更簡(jiǎn)潔,適合深度遍歷;3.避免重複子查詢:定義一次可多次引用,減少冗餘並提升效率;4.更好的模塊化與調(diào)試能力:可單獨(dú)運(yùn)行和驗(yàn)證每個(gè)CTE塊,便於排查問(wèn)題。

See all articles