mysql-窗口函數一

目錄

一、感受一下分組與窗口函數的區別

二、滑動窗口(子窗口)大小的確認

2.1 分組函數下order by使用

?2.2 窗口子句

2.3 執行流程

三、函數使用

窗口函數需要mysql的版本大于等于8才行,可以先檢查一下自己的mysql版本是多少

select version();

準備一下表數據

drop table if exists student;
create table student
(cid    varchar(50),sname  varchar(50),course varchar(50),score  int
) character set utf8mb4;-- 插入兩個班級的學生數據(每個學生包含4門課程成績)
INSERT INTO student (cid, sname, course, score)
VALUES
-- 班級01
('01', '張三', '語文', 85),
('01', '張三', '數學', 92),
('01', '張三', '英語', 78),
('01', '張三', '物理', 88), 
('01', '李四', '語文', 76),
('01', '李四', '數學', 88),
('01', '李四', '英語', 95),
('01', '李四', '化學', 90), 
('01', '王五', '語文', 65),
('01', '王五', '數學', 73),
('01', '王五', '英語', 82),
('01', '王五', '生物', 77), -- 班級02
('02', '趙六', '語文', 90),
('02', '趙六', '數學', 67),
('02', '趙六', '英語', 88),
('02', '趙六', '地理', 85), 
('02', '陳七', '語文', 72),
('02', '陳七', '數學', 85),
('02', '陳七', '英語', 91),
('02', '陳七', '歷史', 89), 
('02', '周八', '語文', 68),
('02', '周八', '數學', 79),
('02', '周八', '英語', 84),
('02', '周八', '政治', 83); 

一、感受一下分組與窗口函數的區別

假設現在有一個需求需要統計每個學生的各科總成績,我們分別使用分組group by 和窗口函數 partition by 來試一下

先來看看group by

select cid, sname, sum(score)
from student
group by sname;

?這里是以每個學生的名字來分組的,顯然這里只有六個學生,那么就只會有六行數據

接下來我們看看 partition by的使用

select *,sum(score) over (partition by sname)
from student;

從行來看:可以很明顯的感受到,分組group by是先分組在把數據進行壓縮,但是窗口函數是保留了并沒有對行數進行壓縮

從列來看:也是發現一個mysql5.7和mysql8的區別,因為我本機是5.7,在云服務器上面用了mysql8,今天驚奇的發現mysql8,不是分組列,不能被展示,意思就是我只能展示兩列,一列是sname(分組列),聚合函數一列

也就是說group by生成的表與原有的表行數和列數都不相同

?

二、滑動窗口(子窗口)大小的確認

2.1 分組函數下order by使用

先說結論,排序只會在當前窗口內進行排序

假設現在有一個需求,需要查詢每個同學的各科成績為降序排列

select sname, course, score, 
row_number() over (partition by sname order by score desc)
from student;

?2.2 窗口子句

窗口子句:控制每一行在可以滑動的子窗口的窗口的大小
起始行:N preceding/unbounded preceding
當前行:current row
終止行:N followding/unbounded preceding

舉例:rows between 上邊界 and 下邊界

#從之前的所有行到當前行
rows between unbounded preceding and current row
#從前面的兩行到當前行
rows between 2 preceding and current row
#從當前的所有行到之后的所有行
rows between current row and unbounded following
#從當前行到后面一行
rows between current row and 1 following

注意:

如果排序子句后面缺少窗口子句:?窗口規范默認是:#從之前的所有行到當前行

rows between unbounded preceding and current row

排序子句和窗口子句都缺少:窗口規范就是:分組的窗口大小

rows between unbounded preceding and unbounded following

2.3 執行流程

  1. 先通過partition by 和order by 定義整個分組的大窗口
  2. 通過orws 子句來定義每一行數據的滑動窗口
  3. 對每行的小窗口內的數據執行并生成新的列

三、函數使用

3.1 排序類

在 SQL 中,rank(),dense_rank(),row_number?是窗口函數,它們的 ??排序依據?? 完全由 over子句中的 order by?字段決定的!!!

函數重復值處理邏輯示例(分數為 90 的兩人)
??ROW_NUMBER()??為每行分配唯一序號,即使值相同也按順序編號。90 → 1, 90 → 2
??RANK()??相同值分配相同排名,后續排名跳躍。90 → 1, 90 → 1?→ 下一行為?3
??DENSE_RANK()??相同值分配相同排名,后續排名連續。90 → 1, 90 → 1?→ 下一行為?2

3.2 聚合類

3.3 跨行類

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

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

相關文章

解決在Mac上無法使用“ll”命令

在 macOS 上,ll 命令是一個常見的別名,它通常是指向 ls -l 的。但是,如果你看到 zsh: command not found: ll,這意味著你當前的 zsh 配置中沒有設置 ll 作為別名。 解決方法: 1. 使用 ls -l 命令 如果只是想查看目錄…

GTA5(傳承/增強) 13980+真車 超跑 大型載具MOD整合包+最新GTA6大型地圖MOD 5月最新更新

1500超跑載具 1000普通超跑 1500真車超跑 各種軍載具1000 各種普通跑車 船舶 飛機 1000 人物1500 添加式led載具1000 超級英雄最新版 添加添加式武器MOD1000 添加地圖MOD500 添加超跑載具2000 當前共計1.2wMOD 4月2日更新 新增770menyoo地圖 當前共計12770 新增48款超級英雄最新…

初學Vue之記事本案例

初學Vue之記事本案例 案例功能需求相關Vue知識案例實現1.實現方法及代碼2.演示 案例收獲與總結 案例功能需求 基于Vue實現記事功能(不通過原生JS實現) 1.點擊保存按鈕將文本框的內容顯示在特定位置,且清空文本框內容 2.點擊清空按鈕&#x…

一個linux系統電腦,一個windows電腦,怎么實現某一個文件夾共享

下載Samba linux主機名字不能超過15個字符 sudo dnf install samba samba-client -y 創建共享文件夾 sudo mkdir /shared 配置文件 vim /etc/samba/smb.conf [shared] path /shared available yes valid users linux電腦用戶 read only no browsable yes p…

樹莓派5+edge-tts 語音合成并進行播放測試

簡介 Edge-TTS 是一個基于微軟 Edge 瀏覽器的開源文本轉語音(TTS)工具,主要用于將文本轉換為自然流暢的語音。它利用了微軟 Azure 的 TTS 技術,支持多種語言和聲音,同時具備高質量的語音合成能力。這里簡單演示在樹莓派中安裝該項目進行簡單測試。 開源倉庫地址:https:/…

多模態革命!拆解夸克AI相機技術架構:如何用視覺搜索重構信息交互?(附開源方案對比)

一、技術人必看:視覺搜索背后的多模態架構設計 夸克「拍照問夸克」功能絕非簡單的OCRQA拼接,而是一套多模態感知-推理-生成全鏈路系統,其技術棧值得開發者深挖: 視覺編碼器:基于Swin Transformer V2,支持4…

論文閱讀:2024 ICLR Workshop. A STRONGREJECT for Empty Jailbreaks

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 A STRONGREJECT for Empty Jailbreaks 對空越獄的 StrongREJECT https://arxiv.org/pdf/2402.10260 https://github.com/dsbowen/strong_reject https://strong-reject.re…

AI生成Flutter UI代碼實踐(一)

之前的雜談中有提到目前的一些主流AI編程工具,比如Cursor,Copilot,Trea等。因為我是Android 開發,日常使用Android Studio,所以日常使用最多的還是Copilot,畢竟Github月月送我會員,白嫖還是挺香…

計網分層體系結構(包括OSI,IP,兩者對比和相關概念)

眾所周知,就像我們計算機領域中的任何東西一樣,計算機網絡也是個分層的體系結構,現代提出的結構就兩種——OSI和TCP/IP,我們先來剖析并對比一下這兩種模型,然后總結一下分層思想中的一些共性。 TCP/IP與OSI結構對比圖 …

面向對象的XML綜合練習

快遞包裹配送管理 需求描述 構建一個快遞包裹配送管理系統,完成以下操作: 記錄每個快遞包裹的信息,包括包裹編號、收件人姓名、收件地址和是否已配送。可以添加新的快遞包裹到系統中。標記某個包裹為已配送狀態。統計所有已配送和未配送的…

什么是鴻蒙南向開發?什么是北向開發?

文章目錄 鴻蒙南向開發 vs 北向開發:底層與生態的雙向賦能一、鴻蒙南向開發:連接硬件的底層基石二、鴻蒙北向開發:構建全場景應用生態三、南向與北向:互補與協同四、如何選擇開發方向?結語 鴻蒙南向開發 vs 北向開發:…

Linux常用命令27——userdel刪除用戶

在使用Linux或macOS日常開發中,熟悉一些基本的命令有助于提高工作效率,userdel命令來自英文詞組user delete的縮寫,其功能是刪除用戶信息。在Linux系統中,一切都是文件,用戶信息被保存到了/etc/passwd、/etc/shadow以及…

[藍橋杯 2021 省 AB] 砝碼稱重 Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] w new int[n 1];int sum 0; // 所有砝碼重量之和for (int i 1; i < n; i) {w[i] sc.nextInt();sum w[i];}sc.close()…

今天的python練習題

目錄 一、每日一言 二、練習題 三、效果展示 四、下次題目 五、總結 一、每日一言 晚上8點到的&#xff0c;還是會被感動到&#xff0c;有一位列車員同志在檢票期間&#xff0c;叫我到列車員專座位上去坐&#xff0c;我很感激他&#xff0c;溫暖人心&#xff0c;所以人間填我…

20250430在ubuntu14.04.6系統上查看系統實時網速

rootrootubuntu:~$ sudo apt-get install iftop 【不需要root權限】 rootrootubuntu:~$ sudo apt-get install nload rootrootubuntu:~$ sudo apt-get install vnstat 【失敗】 rootrootubuntu:~$ sudo apt-get install speedtest-cli rootrootubuntu:~$ sudo apt-get install …

字節一面:后端開發

前言 這是我字節一面的回憶錄&#xff0c;可能有些不全。 由于博主是Java面試Go崗&#xff0c;操作系統和計網問的還是比較多。 個人感覺字節很喜歡追問&#xff0c;博主被追問拷打的找不到北了&#xff0c;總結還是學的太淺了。 面試官給我的建議&#xff1a;再更深挖一些…

快速掌握大語言模型+向量數據庫_RAG實現

一、前言 結合前面掌握的vLLM部署Qwen7B模型、通過Embedding模型&#xff08;bdg-large-zh模型&#xff09;提取高質量作文內容并預先存儲到Milvus向量數據庫中&#xff0c;我們很容易實現RAG方案進一步提高寫作內容的生成質量。 本篇要實現的目標是&#xff1a;通過FlaskAPI…

【FreeRTOS-列表和列表項】

參照正點原子以及以下gitee筆記整理本博客&#xff0c;并將實驗結果附在文末。 https://gitee.com/xrbin/FreeRTOS_learning/tree/master 一、列表和列表項的簡介(熟悉) 1、什么是列表 答&#xff1a;列表是FreeRTOS中的一個數據結構&#xff0c;概念上和鏈表有點類似&#…

【c++】【STL】queue詳解

目錄 queue的作用什么是容器適配器queue的接口構造函數emptysizefrontback queue類的實現 queue的作用 queue是stl庫提供的一種容器適配器&#xff0c;也就是我們數據結構中學到的隊列&#xff0c;是非常常用的數據結構&#xff0c;特點是遵循LILO&#xff08;last in last ou…