ROW_NUMBER() OVER()函式用法;(分組,排序),partition by
1、row_number() over()排序功能:
(1) row_number() over()分組排序功能:
在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 where group by order by 的執行。
partition by 用於給結果集分組,如果沒有指定那麼它把整個結果集作為一個分組,它和聚合函式不同的地方在於它能夠返回一個分組中的多條記錄,而聚合函式一般只有一個反映統計值的記錄。
例如:employee,根據部門分組排序。
SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (partition by workdept ORDER BY salary desc) rank FROM employee -------------------------------------- 000010 A00 152750 1 000110 A00 66500 2 000120 A00 49250 3 200010 A00 46500 4 200120 A00 39250 5 000020 B01 94250 1 000030 C01 98250 1 000130 C01 73800 2
(2)對查詢結果進行排序:(無分組)
SELECT empno,WORKDEPT,SALARY, Row_Number() OVER (ORDER BY salary desc) rank FROM employee -------------------------------------- 000010 A00 152750 1 000030 C01 98250 2 000070 D21 96170 3 000020 B01 94250 4 000090 E11 89750 5 000100 E21 86150 6 000050 E01 80175 7 000130 C01 73800 8 000060 D11 72250 9
row_number() over()和rownum差不多,功能更強一點(可以在各個分組內從1開時排序).
2、rank() over()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內).
select workdept,salary,rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept; ------------------ A00 39250 1 A00 46500 2 A00 49250 3 A00 66500 4 A00 152750 5 B01 94250 1 C01 68420 1 C01 68420 1 C01 73800 3
3、dense_rank() over()是連續排序,有兩個第二名時仍然跟著第三名。相比之下row_number是沒有重複值的
select workdept,salary,dense_rank() over(partition by workdept order by salary) as dense_rank_order from emp order by workdept; ------------------ A00 39250 1 A00 46500 2 A00 49250 3 A00 66500 4 A00 152750 5 B01 94250 1 C01 68420 1 C01 68420 1 C01 73800 2 C01 98250 3
使用ROW_NUMBER刪除重複資料
---假設表TAB中有a,b,c三列,可以使用下列語句刪除a,b,c都相同的重複行。
DELETE FROM (select year, QUARTER, RESULTS, row_number() over(partition by YEAR, QUARTER, RESULTS order by YEAR, QUARTER, RESULTS) AS ROW_NO FROM SALE) WHERE ROW_NO > 1
相關推薦
ROW_NUMBER() OVER()函式用法;(分組,排序),partition by (轉)
1、row_number() over()排序功能: (1) row_number() over()分組排序功能: 在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 where group by order
ROW_NUMBER() OVER()函式用法;(分組,排序),partition by
1、row_number() over()排序功能: (1) row_number() over()分組排序功能: 在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 where group by order by 的執行。 partition
ROW_NUMBER() OVER()函數用法;(分組,排序),partition by
clas 去重 style als targe .cn html sdn body 排序去重1 https://www.cnblogs.com/alsf/p/6344197.html 排序去重2http://blog.csdn.net/ywl570717586/art
ROW_NUMBER() OVER()函式用法詳解 (分組排序 例子多)
語法格式:row_number() over(partition by 分組列 order by 排序列 desc) row_number() over()分組排序功能: 在使用 row_number() over()函式時候,over()裡頭的分組以及排序的執行晚於 wher
ROW_NUMBER() OVER函式的基本用法
看到很多分組函式,今天看到ROW_NUMBER() OVER函式對這個函式功能不瞭解,基本沒有用過,詳細函式介紹:語法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)簡單的說row_number()從1開始,為每一
【POJ - 1696】Space Ant (凸包,最小極角,排序)
題幹: The most exciting space discovery occurred at the end of the 20th century. In 1999, scientists traced down an ant-like creature in the planet
BZOJ--1045-- 糖果傳遞(中位數,排序)
題目連結 :BZOJ--1045-- 糖果傳遞 我們知道如果不頭尾相連的話 直接求一個字首和 答案為ans+=s[i] 不相連的話就是1 和n之間斷開 頭尾相連的話就是 在第k個人之間斷開 設A[i]為 a[i]-平均數的值 S[i] 表示字首和 第k個人斷開 A[k+1]  
PAT甲級1012 (結構體,排序)
題目 To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: C – C Program
oracle listagg() 函式用法(參照例子)
工作中經常遇到很多需求是這樣的,根據條件彙總某些欄位,比如公司有三個投資平臺,同一個客戶拿手機號在三個平臺都註冊了,但註冊過的使用者名稱不一樣,顯示的時候需要根據手機號顯示所有註冊過的名稱。(我用的是oracle資料庫) 1、原始資料是這樣的,如圖: 2、要求顯示成這樣,如
Oracle中的row_number()over()函式
最近要實現一個功能,頭疼了半天,最終使用這個函式解決了 問題: 一個年級表 一個學生表 實現效果: 實現sql: SELECT * FROM T_CLASS AA LE
Sql資料庫儲存過程傳值(傳遞資料表名,列名),sp_executesql函式的使用
遇到的專案需求是:對幾個不同的資料表和相應的欄位進行類似的操作,表的名稱和相關的列名可以作為儲存過程的引數傳遞,這樣可以使用遊標遍歷不同表格的不同的列,再使用相同函式求出返回值進行統一的處理。由於專案中表的資料龐大,關係複雜,此處做簡化處理,描述大致意思。(此處的資料庫是SQ
建立一個物件陣列,內放5個學生的資料(學號,成績),用指向物件的指標做函式引數,在max函式中找出5個學生中成績最高者,並輸出其學號。
原始碼如下:主要注意友元函式的宣告 #include <iostream> #include <string> using namespace std; class Student { public: Student(string n,flo
xpath 特殊用法 starts-with(),string(.)的學習筆記
#-*-coding:utf8-*- from lxml import etree html1 = ''' <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-
Codeforces 3B.Lorry(貪心,排序)
明明是一道水題好麼。。。 題意是有兩種貨物,一種佔用1單位面積,另一種佔用2單位面積 每個貨物有對應的價值 現在有n個貨物,總面積為v,問如何能夠使所載貨物價值最大 很明顯的揹包問題 但是因為要列印路徑,感覺直接排序寫起來比較方便 我的思路是按不同面積排序,每次比較兩種情況
Oracle ROW_NUMBER() OVER()函式的實際場景使用
前言 最近開發的系統中有個線上諮詢功能。學生在前臺提交諮詢資訊,教師可以登入後臺回覆諮詢。該功能設計是直接使用一張表,使用是否開始標識該條記錄是否是諮詢的開始,然後使用一個會話id標識是屬於一次諮詢,根據建立時間排序,最後就像聊天一樣。 後來遇到一個需求,就
opencv中addWeighted()函式用法總結(05)
還是老習慣,分三步走。第一步,功能說明。第二步,結果圖顯示,第三步,API詳解。第四步,程式碼展示(註釋很詳細,保證所有有C++基礎的人都可以看懂。) 第一步,功能說明:addWeighted()函式是將兩張相同大小,相同型別的圖片融合的函式。他可以實現圖片的特效,不多說了
!HDU 4311 最小曼哈頓距離-思維&卡時間-(橫縱座標分開算,排序)
題意:有n個點,求以這n個點中的某一點為起點,到各點的曼哈頓距離和最小是多少 分析: 暴力列舉又要超時,這種題一般都是考思維了,多半都是用技巧找到一個高效的方法。個人覺得這題跟上一篇文章的題是一個型別。這種思想要記住。 這題也是用“分治”,雖說題目要求的是曼哈頓距離,但是我
C語言sscanf函式用法總結(一) 正則表示式
#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> using namespace std; void sscanf_te
opencv中namedWindow( )函式用法總結(02)
還是老習慣,分三步走。第一步,功能說明。第二步,結果圖顯示,第三步,API詳解。第四步,程式碼展示(註釋很詳細,保證所有有C++基礎的人都可以看懂。) 第一步,功能說明:namedWindow()的功能就是新建一個顯示視窗。可以指定視窗的型別。 第二步,結果圖顯示:我
opencv中createTrackbar()函式用法總結(06)
在opencv中滑動條是很方便的一個測試函式,我們可以不需要更改程式就可以更改變數的值來觀察效果。 還是老習慣,分三步走。第一步,功能說明。第二步,結果圖顯示,第三步,API詳解。第四步,程式碼展示(註釋很詳細,保證所有有C++基礎的人都可以看懂。) 第一步,功能說明:用