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

sql ROW_NUMBER()與OVER()方法案例詳解

 更新時間:2021年08月24日 12:17:03   作者:一彡十  
這篇文章主要介紹了sql ROW_NUMBER()與OVER()方法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

語法格式: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' 

到此這篇關于sql ROW_NUMBER()與OVER()方法案例詳解的文章就介紹到這了,更多相關sql ROW_NUMBER()與OVER()方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Mysql中的JSON系列操作函數(shù)

    詳解Mysql中的JSON系列操作函數(shù)

    新版 Mysql 中加入了對 JSON Document 的支持,可以創(chuàng)建 JSON 類型的字段,并有一套函數(shù)支持對JSON的查詢、修改等操作,下面就實際體驗一下
    2016-07-07
  • mysql 5.6.21 安裝與配置詳細步驟

    mysql 5.6.21 安裝與配置詳細步驟

    這篇文章主要介紹了mysql5.6.21安裝與配置的詳細步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • ubuntu 16.04下mysql5.7.17開放遠程3306端口

    ubuntu 16.04下mysql5.7.17開放遠程3306端口

    這篇文章主要介紹了ubuntu 16.04下mysql5.7.17開放遠程3306端口的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL中order?by排序時數(shù)據(jù)存在null則排序在最前面的方法

    MySQL中order?by排序時數(shù)據(jù)存在null則排序在最前面的方法

    order by排序是最常用的功能,但是排序有時會遇到數(shù)據(jù)為空null的情況,這樣排序就會亂了,這篇文章主要給大家介紹了關于MySQL中order?by排序時數(shù)據(jù)存在null則排序在最前面的相關資料,需要的朋友可以參考下
    2024-06-06
  • MySQL主從同步、讀寫分離配置步驟

    MySQL主從同步、讀寫分離配置步驟

    根據(jù)要求配置MySQL主從備份、讀寫分離,結合網(wǎng)上的文檔,對搭建的步驟和出現(xiàn)的問題以及解決的過程做了如下筆記
    2012-03-03
  • 實現(xiàn)MySQL與elasticsearch的數(shù)據(jù)同步的代碼示例

    實現(xiàn)MySQL與elasticsearch的數(shù)據(jù)同步的代碼示例

    MySQL 自身簡單、高效、可靠,是又拍云內部使用最廣泛的數(shù)據(jù)庫,但是當數(shù)據(jù)量達到一定程度的時候,對整個 MySQL 的操作會變得非常遲緩,這個時候我們就需要MySQL與elasticsearch數(shù)據(jù)同步,接下來就給大家介紹如何實現(xiàn)數(shù)據(jù)同步
    2023-07-07
  • MySQL 中的 LIMIT 語句及基本用法

    MySQL 中的 LIMIT 語句及基本用法

    LIMIT 語句用于限制查詢返回的行數(shù),常用于分頁查詢或取部分數(shù)據(jù),提高查詢效率,這篇文章主要介紹了MySQL 中的 LIMIT 語句,需要的朋友可以參考下
    2025-04-04
  • MySQL 索引和數(shù)據(jù)表該如何維護

    MySQL 索引和數(shù)據(jù)表該如何維護

    使用合適的數(shù)據(jù)類型完成數(shù)據(jù)表創(chuàng)建和建立索引后,工作并沒有完結——你需要去維護數(shù)據(jù)表和索引以保證它們運行良好。數(shù)據(jù)表維護的主要目的是查找和修復沖突,維護精確的索引統(tǒng)計和減少碎片。
    2021-05-05
  • MySql日期查詢語句詳解

    MySql日期查詢語句詳解

    在mysql中對時間日期操作的函數(shù)有很多,有時我們就希望直接通過sql查詢出指定日期的數(shù)據(jù)
    2013-11-11
  • mysql查詢的時候給字段賦默認值操作

    mysql查詢的時候給字段賦默認值操作

    這篇文章主要介紹了mysql查詢的時候給字段賦默認值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論

客服| 湖南省| 武夷山市| 乌拉特中旗| 巴彦县| 庐江县| 望都县| 泰顺县| 巴里| 枣庄市| 神池县| 西乌珠穆沁旗| 敖汉旗| 永胜县| 阜新| 秀山| 西城区| 揭阳市| 孟州市| 方正县| 股票| 贵州省| 成武县| 车险| 额尔古纳市| 周至县| 万源市| 松江区| 平远县| 师宗县| 桓台县| 沁源县| 桐城市| 阿荣旗| 鄂州市| 资源县| 额济纳旗| 镇赉县| 安多县| 常山县| 崇左市|