【MySQL】十六,MySQL窗口函數

在 MySQL 8.0 及以后版本中,窗口函數(Window Functions)為數據分析和處理提供了強大的工具。窗口函數允許在查詢結果集上執行計算,而不必使用子查詢或連接,這使得某些類型的計算更加高效和簡潔。

語法結構

function_name() OVER ([PARTITION BY expression_list][ORDER BY expression_list][frame_clause]
)
  • PARTITION BY:將查詢結果集分成多個分區,類似于 GROUP BY,但在窗口函數中是用于定義數據的分組邏輯。例如,按照部門分區,然后在每個部門內進行操作。
  • ORDER BY:對每個分區內的行進行排序,這是可選的。窗口函數的計算可能會依賴于行的順序,如計算累計和等。

創建測試表

CREATE TABLE `employee` (`employee_id` int NOT NULL AUTO_INCREMENT,`department` varchar(45) DEFAULT NULL,`salary` varchar(45) DEFAULT NULL,PRIMARY KEY (`employee_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

寫入測試數據

INSERT INTO `test`.`employee` (`employee_id`, `department`, `salary`) VALUES (1, 'Sales', '6000');
INSERT INTO `test`.`employee` (`employee_id`, `department`, `salary`) VALUES (2, 'Sales', '6000');
INSERT INTO `test`.`employee` (`employee_id`, `department`, `salary`) VALUES (3, 'Sales', '5000');
INSERT INTO `test`.`employee` (`employee_id`, `department`, `salary`) VALUES (4, 'IT', '7000');
INSERT INTO `test`.`employee` (`employee_id`, `department`, `salary`) VALUES (5, 'IT', '9000');
INSERT INTO `test`.`employee` (`employee_id`, `department`, `salary`) VALUES (6, 'Marketing', '5500');
INSERT INTO `test`.`employee` (`employee_id`, `department`, `salary`) VALUES (7, 'Sales', '5000');

使用窗口函數

SELECT employee_id, department, salary,
RANK() OVER (PARTITION BY department ORDER BY salary desc) AS ran,
DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS d_ran,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_num
FROM employee;

RANK() 函數計算排名,如果有并列情況,排名會出現跳躍。
DENSE_RANK() 函數在并列情況下不會跳躍。
ROW_NUMBER() 函數為每一行分配一個唯一的行號,即使有并列情況也是如此。

實際使用時,可以通過結合cte表達式,指定row_num值,來實現數據去重的效果。
例如:

with distinct_tbl as (select *,ROW_NUMBER() OVER (PARTITION BY department,salary ORDER BY salary DESC) AS row_numfrom employee
)
select * from distinct_tbl 
where row_num = 1

執行結果
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87525.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87525.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87525.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微型氣象儀在城市環境的應用

微型氣象儀憑借其體積小、成本低、部署靈活、數據實時性強等特點,在城市環境中得到廣泛應用,能夠為城市規劃、環境管理、公共安全、居民生活等領域提供精細化氣象數據支持。一、核心應用場景1. 城市微氣候監測與優化熱島效應研究場景:在城市不…

【仿muduo庫實現并發服務器】eventloop模塊

仿muduo庫實現并發服務器一.eventloop模塊1.成員變量std::thread::id _thread_id;//線程IDPoller _poll;int _event_fd;std::vector<Function<Function>> _task;TimerWheel _timer_wheel2.EventLoop構造3.針對eventfd的操作4.針對poller的操作5.針對threadID的操作…

Redis 加鎖、解鎖

Redis 加鎖和解鎖的應用 上代碼 應用調用示例 RedisLockEntity lockEntityYlb RedisLockEntity.builder().lockKey(TradeConstants.HP_APP_AMOUNT_LOCK_PREFIX appUser.getAccount()).value(orderId).build();boolean isLockedYlb false;try {if (redisLock.tryLock(lockE…

在 Windows 上為 WSL 增加 root 賬號密碼并通過 Shell 工具連接

1. 為 WSL 設置 root 用戶密碼 在 Windows 上使用 WSL&#xff08;Windows Subsystem for Linux&#xff09;時&#xff0c;默認情況下并沒有啟用 root 賬號的密碼。為了通過 SSH 或其他工具以 root 身份連接到 WSL&#xff0c;我們需要為 root 用戶設置密碼。 設置 root 密碼步…

2730、找到最長的半重復子字符穿

題目&#xff1a; 解答&#xff1a; 窗口為[left&#xff0c;right]&#xff0c;ans為窗口長度&#xff0c;same為子串長度&#xff0c;窗口滿足題設條件&#xff0c;即只含一個連續重復字符&#xff0c;則更新ans&#xff0c;否則從左邊開始一直彈出&#xff0c;直到滿足條件…

MCP Java SDK源碼分析

MCP Java SDK源碼分析 一、引言 在當今人工智能飛速發展的時代&#xff0c;大型語言模型&#xff08;LLMs&#xff09;如GPT - 4、Claude等展現出了強大的語言理解和生成能力。然而&#xff0c;這些模型面臨著一個核心限制&#xff0c;即無法直接訪問外部世界的數據和工具。M…

[Linux]內核如何對信號進行捕捉

要理解Linux中內核如何對信號進行捕捉&#xff0c;我們需要很多前置知識的理解&#xff1a; 內核態和用戶態的區別CPU指令集權限內核態和用戶態之間的切換 由于文章的側重點不同&#xff0c;上面這些知識我會在這篇文章盡量詳細提及&#xff0c;更詳細內容還得請大家查看這篇…

設計模式-觀察者模式、命令模式

觀察者模式Observer&#xff08;觀察者&#xff09;—對象行為型模式定義&#xff1a;定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一主題對象,在它的狀態發生變化時,會通知所有的觀察者.先將 Observer A B C 注冊到 Observable &#xff0c;那么當 Observable 狀態…

【Unity筆記01】基于單例模式的簡單UI框架

單例模式的UIManagerusing System.Collections; using System.Collections.Generic; using UnityEngine;public class UIManager {private static UIManager _instance;public Dictionary<string, string> pathDict;public Dictionary<string, GameObject> prefab…

深入解析 OPC UA:工業自動化與物聯網的關鍵技術

在當今快速發展的工業自動化和物聯網&#xff08;IoT&#xff09;領域&#xff0c;數據的無縫交換和集成變得至關重要。OPC UA&#xff08;Open Platform Communications Unified Architecture&#xff09;作為一種開放的、跨平臺的工業通信協議&#xff0c;正在成為這一領域的…

MCP 協議的未來發展趨勢與學習路徑

MCP 協議的未來發展趨勢 6.1 MCP 技術演進與更新 MCP 協議正在快速發展&#xff0c;不斷引入新的功能和改進。根據 2025 年 3 月 26 日發布的協議規范&#xff0c;MCP 的最新版本已經引入了多項重要更新&#xff1a; 1.HTTP Transport 正式轉正&#xff1a;引入 Streamable …

硬件嵌入式學習路線大總結(一):C語言與linux。內功心法——從入門到精通,徹底打通你的任督二脈!

嵌入式工程師學習路線大總結&#xff08;一&#xff09; 引言&#xff1a;C語言——嵌入式領域的“屠龍寶刀”&#xff01; 兄弟們&#xff0c;如果你想在嵌入式領域闖出一片天地&#xff0c;C語言就是你手里那把最鋒利的“屠龍寶刀”&#xff01;它不像Python那樣優雅&#xf…

MCP server資源網站去哪找?國內MCP服務合集平臺有哪些?

在人工智能飛速發展的今天&#xff0c;AI模型與外部世界的交互變得愈發重要。一個好的工具不僅能提升開發效率&#xff0c;還能激發更多的創意。今天&#xff0c;我要給大家介紹一個寶藏平臺——AIbase&#xff08;<https://mcp.aibase.cn/>&#xff09;&#xff0c;一個…

修改Spatial-MLLM項目,使其專注于無人機航拍視頻的空間理解

修改Spatial-MLLM項目&#xff0c;使其專注于無人機航拍視頻的空間理解。以下是修改方案和關鍵代碼實現&#xff1a; 修改思路 輸入處理&#xff1a;將原項目的視頻文本輸入改為單一無人機航拍視頻/圖像輸入問題生成&#xff1a;自動生成空間理解相關的問題&#xff08;無需用戶…

攻防世界-Reverse-insanity

知識點 1.ELF文件逆向 2.IDApro的使用 3.strings的使用 步驟 方法一&#xff1a;IDA 使用exeinfo打開&#xff0c;發現是32位ELF文件&#xff0c;然后用ida32打開。 找到main函數&#xff0c;然后F5反編譯&#xff0c;得到flag。 tip&#xff1a;該程序是根據隨機函數生成…

【openp2p】 學習1:P2PApp和優秀的go跨平臺項目

P2PApp下面給出一個基于 RESTful 風格的 P2PApp 管理方案示例,供二次開發或 API 對接參考。核心思路就是把每個 P2PApp 當成一個可創建、查詢、修改、啟動/停止、刪除的資源來管理。 一、P2PApp 資源模型 P2PApp:id: string # 唯一標識name: string # …

邊緣設備上部署模型的限制之一——顯存占用:模型的參數量只是冰山一角

邊緣設備上部署模型的限制之一——顯存占用&#xff1a;模型的參數量只是冰山一角 在邊緣設備上部署深度學習模型已成為趨勢&#xff0c;但資源限制是其核心挑戰之一。其中&#xff0c;顯存&#xff08;或更廣義的內存&#xff09;占用是開發者們必須仔細考量的重要因素。許多…

腦機新手指南(二十一)基于 Brainstorm 的 MEG/EEG 數據分析(上篇)

一、腦機接口與神經電生理技術概述 腦機接口&#xff08;Brain-Computer Interface, BCI&#xff09;是一種在大腦與外部設備之間建立直接通信通道的技術&#xff0c;它通過采集和分析大腦信號來實現對設備的控制或信息的輸出。神經電生理信號作為腦機接口的重要數據來源&…

[Linux]內核態與用戶態詳解

內核態和用戶態是針對CPU狀態的描述。在內核態可以執行一切特權代碼&#xff0c;在用戶態只能執行那些受限級別的代碼。如果需要調用特權代碼需要進行內核態切換。 一、內核態和用戶態概況 內核態&#xff1a; 系統中既有操作系統的程序&#xff0c;也有普通用戶程序。為了安…

如何查看每個磁盤都安裝了哪些軟件或程序并卸載?

步驟如下&#xff1a; 1、點擊電腦桌面左下角&#xff1a; 2、選擇【應用和功能】 3、點擊下拉框&#xff0c;選擇想要查看的磁盤&#xff0c;下方顯示的就是所有C磁盤下安裝的軟件和程序 卸載方法&#xff1a; 點擊對應的應用&#xff0c;然后點擊卸載即可&#xff1a;