最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MYSQL row_number()與over()函數(shù)用法詳解

 更新時間:2021年08月13日 10:30:56   作者:一彡十  
這篇文章主要介紹了MYSQL row_number()與over()函數(shù)用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

語法格式:row_number() over(partition by 分組列 order by 排序列 desc)

row_number() over()分組排序功能:

在使用 row_number() over()函數(shù)時候,over()里頭的分組以及排序的執(zhí)行晚于 where 、group by、  order by 的執(zhí)行。

例一:

表數(shù)據(jù):

create table TEST_ROW_NUMBER_OVER(
       id varchar(10) not null,
       name varchar(10) null,
       age varchar(10) null,
       salary int null
);
select * from TEST_ROW_NUMBER_OVER t;
 
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(1,'a',10,8000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(1,'a2',11,6500);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(2,'b',12,13000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(2,'b2',13,4500);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(3,'c',14,3000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(3,'c2',15,20000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(4,'d',16,30000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(5,'d2',17,1800);

一次排序:對查詢結果進行排序(無分組)

select id,name,age,salary,row_number()over(order by salary desc) rn
from TEST_ROW_NUMBER_OVER t

結果:

進一步排序:根據(jù)id分組排序

select id,name,age,salary,row_number()over(partition by id order by salary desc) rank
from TEST_ROW_NUMBER_OVER t

結果:

 再一次排序:找出每一組中序號為一的數(shù)據(jù)

select * from(select id,name,age,salary,row_number()over(partition by id order by salary desc) rank
from TEST_ROW_NUMBER_OVER t)
where rank <2

結果:

排序找出年齡在13歲到16歲數(shù)據(jù),按salary排序

select id,name,age,salary,row_number()over(order by salary desc)  rank
from TEST_ROW_NUMBER_OVER t where age between '13' and '16'

結果:結果中 rank 的序號,其實就表明了 over(order by salary desc) 是在where age between and 后執(zhí)行的

例二:

1.使用row_number()函數(shù)進行編號,如

select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer

原理:先按psd進行排序,排序完后,給每條數(shù)據(jù)進行編號。

2.在訂單中按價格的升序進行排序,并給每條記錄進行排序代碼如下:

select DID,customerID,totalPrice,ROW_NUMBER() over(order by totalPrice) as rows from OP_Order

3.統(tǒng)計出每一個各戶的所有訂單并按每一個客戶下的訂單的金額 升序排序,同時給每一個客戶的訂單進行編號。這樣就知道每個客戶下幾單了:

select ROW_NUMBER() over(partition by customerID  order by totalPrice)
 as rows,customerID,totalPrice, DID from OP_Order

4.統(tǒng)計每一個客戶最近下的訂單是第幾次下的訂單:

with tabs as  
(  
select ROW_NUMBER() over(partition by customerID  order by totalPrice)
 as rows,customerID,totalPrice, DID from OP_Order  
 )  
select MAX(rows) as '下單次數(shù)',customerID from tabs 
group by customerID 

5.統(tǒng)計每一個客戶所有的訂單中購買的金額最小,而且并統(tǒng)計改訂單中,客戶是第幾次購買的:

思路:利用臨時表來執(zhí)行這一操作。

1.先按客戶進行分組,然后按客戶的下單的時間進行排序,并進行編號。

2.然后利用子查詢查找出每一個客戶購買時的最小價格。

3.根據(jù)查找出每一個客戶的最小價格來查找相應的記錄。

    with tabs as  
     (  
    select ROW_NUMBER() over(partition by customerID  order by insDT) 
as rows,customerID,totalPrice, DID from OP_Order  
    )  
     select * from tabs  
    where totalPrice in   
    (  
    select MIN(totalPrice)from tabs group by customerID  
     ) 

6.篩選出客戶第一次下的訂單。

思路。利用rows=1來查詢客戶第一次下的訂單記錄。

    with tabs as  
    (  
    select ROW_NUMBER() over(partition by customerID  order by insDT) as rows,* from OP_Order  
    )  
    select * from tabs where rows = 1 
    select * from OP_Order 

7.注意:在使用over等開窗函數(shù)時,over里頭的分組及排序的執(zhí)行晚于“where,group by,order by”的執(zhí)行。

    select   
    ROW_NUMBER() over(partition by customerID  order by insDT) as rows,  
    customerID,totalPrice, DID  
    from OP_Order where insDT>'2011-07-22' 

到此這篇關于MYSQL row_number()與over()函數(shù)用法詳解的文章就介紹到這了,更多相關MYSQL row_number()與over()函數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL中數(shù)據(jù)類型相關的優(yōu)化辦法

    MySQL中數(shù)據(jù)類型相關的優(yōu)化辦法

    這篇文章主要介紹了MySQL中數(shù)據(jù)類型相關的優(yōu)化辦法,包括使用多列索引等相關的優(yōu)化方法,需要的朋友可以參考下
    2015-07-07
  • mysql數(shù)據(jù)庫常見的優(yōu)化操作總結(經(jīng)驗分享)

    mysql數(shù)據(jù)庫常見的優(yōu)化操作總結(經(jīng)驗分享)

    這篇文章主要給大家介紹了關于mysql數(shù)據(jù)庫常見的優(yōu)化操作,文章總結的都是個人日常開發(fā)使用mysql數(shù)據(jù)庫的經(jīng)驗所得,其中包括Index索引、少用SELECT*、EXPLAIN SELECT以及開啟查詢緩存等相關資料,相信會對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • windows下mysql 5.7.20 安裝配置方法圖文教程

    windows下mysql 5.7.20 安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了windows下mysql 5.7.20 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • mysql 事務處理及表鎖定深入簡析

    mysql 事務處理及表鎖定深入簡析

    本文將詳細介紹mysql 事務處理及表鎖定,需要了解更多的朋友可以參考下
    2012-11-11
  • mysql中如何查詢數(shù)據(jù)庫中的表名

    mysql中如何查詢數(shù)據(jù)庫中的表名

    這篇文章主要介紹了mysql中如何查詢數(shù)據(jù)庫中的表名問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • IDEA連接mysql時區(qū)問題解決

    IDEA連接mysql時區(qū)問題解決

    在使用MySQL數(shù)據(jù)庫時,經(jīng)常會遇到需要設置時區(qū)的情況,本文主要介紹了IDEA連接mysql時區(qū)問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • MySQL中with?rollup的用法及說明

    MySQL中with?rollup的用法及說明

    這篇文章主要介紹了MySQL中with?rollup的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • MySQL?8.0新功能監(jiān)控統(tǒng)計限制連接不再擔心被垃圾SQL搞爆內存

    MySQL?8.0新功能監(jiān)控統(tǒng)計限制連接不再擔心被垃圾SQL搞爆內存

    這篇文章主要介紹了MySQL?8.0新功能監(jiān)控統(tǒng)計限制連接不再擔心被垃圾SQL搞爆內存詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • mysql 8.0.12 winx64下載安裝教程

    mysql 8.0.12 winx64下載安裝教程

    這篇文章主要為大家詳細介紹了mysql 8.0.12 winx64下載安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 淺析MySQL 主鍵使用數(shù)字還是uuid查詢快

    淺析MySQL 主鍵使用數(shù)字還是uuid查詢快

    在實際開發(fā)中可能會生成uuid作為主鍵那么疑問來了,到底MySQL 主鍵使用數(shù)字還是uuid查詢快呢?下面小編給大家?guī)韺嵗a給大家詳細介紹,感興趣的朋友跟隨小編一起看看吧
    2021-08-08

最新評論

名山县| 荆州市| 南丹县| 婺源县| 三门峡市| 临猗县| 北票市| 定结县| 二连浩特市| 八宿县| 原平市| 浦北县| 仙桃市| 洛阳市| 太湖县| 新巴尔虎左旗| 防城港市| 高台县| 石阡县| 西乌| 龙门县| 萝北县| 玉屏| 古丈县| 汽车| 宜阳县| 通辽市| 滕州市| 同江市| 三明市| 柘城县| 兰考县| 建宁县| 和顺县| 丹棱县| 平昌县| 海安县| 游戏| 阜新| 渝北区| 胶南市|