MySQL中ROW_NUMBER() OVER的用法以及使用場景

使用語法

ROW_NUMBER() OVER ([PARTITION BY partition_column1, partition_column2, ...]ORDER BY sort_column1 [ASC|DESC], sort_column2 [ASC|DESC], ...
)
  • PARTITION BY:將數據按指定列分組,每組內單獨生成行號。
  • ORDER BY:決定組內行號的排序依據。

適用場景

1. 分頁查詢

在需要對結果集分頁且需要全局排序時,ROW_NUMBER() 可替代傳統 LIMIT/OFFSET,尤其在復雜排序或嵌套查詢中更高效。

SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY create_time DESC) AS row_num,id, title, create_timeFROM articles
) AS tmp
WHERE row_num BETWEEN 11 AND 20; -- 獲取第2頁(每頁10條)

2. 去重(保留每組最新/第一條記錄)

當數據有重復時,按業務邏輯保留每組中的特定行(如最新記錄)。

WITH ranked_data AS (SELECT id, user_id, order_date,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY order_date DESC) AS rnFROM orders
)
SELECT id, user_id, order_date
FROM ranked_data
WHERE rn = 1; -- 每個用戶最近的一筆訂單

3. 生成唯一排名(無并列排名)

即使值相同,ROW_NUMBER() 也會生成唯一序號(區別于 RANK() 和 DENSE_RANK())。

SELECT student_id, exam_score,ROW_NUMBER() OVER (ORDER BY exam_score DESC) AS rank
FROM exam_results; -- 分數相同的學生會得到不同排名

4. 分組分析(如時間序列處理)

按分區跟蹤行號,用于分析組內趨勢(如計算用戶行為序列

SELECT user_id, event_time, event_type,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_time) AS action_seq
FROM user_events; -- 標記用戶行為的順序

注意事項:

去重替代方案:若僅需去重,可考慮 DISTINCTGROUP BY,但復雜邏輯仍需 ROW_NUMBER()。

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

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

相關文章

【人工智能】釋放本地AI潛能:LM Studio用戶腳本自動化DeepSeek的實戰指南

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著大型語言模型(LLM)的快速發展,DeepSeek以其高效的性能和開源特性成為開發者關注的焦點。LM Studio作為一款強大的本地AI模型管理工具…

筆試強訓:Day3

一、牛牛沖鉆五&#xff08;模擬&#xff09; 登錄—專業IT筆試面試備考平臺_牛客網 #include<iostream> using namespace std; int main(){int t,n,k;string s;cin>>t;while(t--){cin>>n>>k>>s;int ret0;//統計加了多少星for(int i0;i<n;i)…

語音識別質量的跟蹤

背景 這個項目是用來生成結構化的電子病歷的。數據的來源是醫生的錄音。中間有一大堆的處理&#xff0c;語音識別&#xff0c;關鍵字匹配&#xff0c;結構化處理&#xff0c;病歷編輯......。最多的時候給上百家醫院服務。 語音識別質量的跟蹤 一、0225醫院的訓練后的情況分…

人工智能搜索時代的SEO:關鍵趨勢與優化策略

隨著人工智能&#xff08;AI&#xff09;技術的飛速發展&#xff0c;搜索引擎的運作方式正在經歷前所未有的變革。2025年&#xff0c;AI驅動的搜索&#xff08;如谷歌的AI概覽、ChatGPT搜索和必應的AI增強功能&#xff09;不僅改變了用戶獲取信息的方式&#xff0c;還為SEO從業…

Node.js心得筆記

npm init 可用npm 來調試node項目 瀏覽器中的頂級對象時window <ref *1> Object [global] { global: [Circular *1], clearImmediate: [Function: clearImmediate], setImmediate: [Function: setImmediate] { [Symbol(nodejs.util.promisify.custom)]: [Getter] }, cl…

計算機網絡01-網站數據傳輸過程

局域網&#xff1a; 覆蓋范圍小&#xff0c;自己花錢買設備&#xff0c;寬帶固定&#xff0c;自己維護&#xff0c;&#xff0c;一般長度不超過100米&#xff0c;&#xff0c;&#xff0c;帶寬也比較固定&#xff0c;&#xff0c;&#xff0c;10M&#xff0c;&#xff0c;&…

Mysql常用函數解析

字符串函數 CONCAT(str1, str2, …) 將多個字符串連接成一個字符串。 SELECT CONCAT(Hello, , World); -- 輸出: Hello World??SUBSTRING(str, start, length) 截取字符串的子串&#xff08;起始位置從1開始&#xff09;。 SELECT SUBSTRING(MySQL, 3, 2); -- 輸出: SQ…

SpringMVC 前后端數據交互 中文亂碼

ajax 前臺傳入數據&#xff0c;但是后臺接收到的數據中文亂碼 首先我們分析一下原因&#xff1a;我們調用接口的時候傳入的中文&#xff0c;是沒有亂碼的 此時我們看一下Java后臺接口對應的編碼&#xff1a; 默認情況&#xff1a;Servlet容器&#xff08;如Tomcat&#xff09;默…

loads、dumps、jsonpath使用場景

在處理JSON數據時&#xff0c;loads、dumps 和 jsonpath 是三個非常有用的工具或概念。它們各自在不同的場景下發揮作用&#xff0c;讓我們一一來看&#xff1a; 1. loads loads 函數是 Python 中 json 模塊的一部分&#xff0c;用于將 JSON 格式的字符串解析成 Python 的數據…

Java學習手冊:Spring 事務管理

一、事務管理的概念 事務是一組操作的集合&#xff0c;這些操作要么全部成功&#xff0c;要么全部失敗。事務管理的目的是保證數據的一致性和完整性。在數據庫操作中&#xff0c;事務管理尤為重要&#xff0c;例如銀行轉賬、訂單支付等場景都需要事務管理來確保數據的正確性。…

echarts自定義圖表--柱狀圖-橫向

區別于縱向表格 xAxis和yAxis對調 要將label全部固定到最右側&#xff1a; 隱藏一個柱形 為每個label設置固定的偏移距離 offset: [300 - 80, 0] 在data中加入label的配置 根據現在的值生成距離右側的偏移 更新方法 chart.setOption({series: [{},{data: data.map(v > ({v…

【CV數據集】Visdrone2019無人機目標檢測數據集(YOLO、VOC、COCO格式)

visdrone2019的Task1是非常通用的目標檢測數據集&#xff0c;也是許多人做目標檢測論文和項目必然會用到的數據集&#xff0c;我將該數據集進行了處理&#xff0c;將其YOLO、VOC和COCO格式都整理好&#xff0c;通過下載我整理好的數據集和相關文件&#xff0c;可以直接在自己的…

常見電源的解釋說明

英文縮寫 BJT&#xff08;bipolar junction transistor&#xff09;雙極型結晶體管FET&#xff08;field-effect transistor&#xff09;場效應管TTL&#xff08;Transistor-Transistor Logic&#xff09;三極管CMOS&#xff08;Complementary Metal Oxide Semiconductor&…

【2025年五一數學建模競賽】A題 解題思路與模型代碼

2025年五一數學建模競賽 A題 問題一&#xff1a;推測支路 1 和支路 2 的車流量 1.1 問題描述 根據提供的主路歷史數據以及已知的支路車流量變化趨勢&#xff08;支路1呈線性增長&#xff0c;支路2先線性增長后線性減少&#xff09;&#xff0c;推測這兩個支路在特定時間段&a…

d202551

目錄 一、175. 組合兩個表 - 力扣&#xff08;LeetCode&#xff09; 二、511. 游戲玩法分析 I - 力扣&#xff08;LeetCode&#xff09; 三、1204. 最后一個能進入巴士的人 - 力扣&#xff08;LeetCode&#xff09; 一、175. 組合兩個表 - 力扣&#xff08;LeetCode&#xf…

RISC-V AIA SPEC學習(四)

第五章 Interrupts for Machine andSupervisor Levels 核心內容?? 1.主要中斷類型與默認優先級:?? 定義了機器級別(M-level)和監管者級別(S-level)的標準中斷類型(如MEI、SEI、MTI等)。默認優先級規則:本地中斷(如軟件/定時器)優先級高于外部中斷,RAS事件(如低/高…

WSGI(Web Server Gateway Interface)服務器

0、什么是 WSGI WSGI &#xff08;Web Server Gateway Interface&#xff09; 是一種Python規范&#xff0c;它定義了 Web 服務器 和 Python Web 應用程序之間的通信接口。 即&#xff0c;能夠讓各種 Web 服務器&#xff08;如 Nginx、Apache 等&#xff09;和 Python Web 框架…

博客打卡-人類基因序列功能問題動態規劃

題目如下&#xff1a; 眾所周知&#xff0c;人類基因可以被認為是由4個核苷酸組成的序列&#xff0c;它們簡單的由四個字母A、C、G和T表示。生物學家一直對識別人類基因和確定其功能感興趣&#xff0c;因為這些可以用于診斷人類疾病和設計新藥物。 生物學家確定新基因序列功能…

基本功能學習

一.enum枚舉使用 E_SENSOR_REQ_NONE 的定義及用途 在傳感器驅動開發或者電源管理模塊中&#xff0c;E_SENSOR_REQ_NONE通常被用來表示一種特殊的狀態或請求模式。這種狀態可能用于指示當前沒有活動的傳感器請求&#xff0c;或者是默認初始化狀態下的一種占位符。 可能的定義…

vitest | 測試框架vitest | 總結筆記

目錄 測試框架 vitest 介紹 測試文件的寫法 文件取名&#xff1a;文件名中要有 test&#xff0c;即 xxx.test.ts 引入庫&#xff1a; test 測試&#xff1a; 測試運行&#xff1a; npx test 文件名 &#xff0c;每次保存后會重新運行。 ★ expect 方法&#xff1a; v…