row number over函式學習

2021-10-07 15:46:10 字數 2728 閱讀 7334

最近在專案中遇到乙個這樣的需求:有乙個流量圖,需要統計從a節點流出的流量,以及每乙個下游節點收到的流量,用於統計比例,每一條流量的邊作為sql的一行進行儲存。如下面的sql所示:

create

table

`test_table`

(`id`

intnot

null

auto_increment

comment

'id,系統自增'

, pre_node_name varchar

notnull

comment

'上游節點名稱'

, pre_node_out int

notnull

comment

'上游節點流出流量'

, next_node_name varchar

notnull

comment

'下游節點名稱'

, next_node_in int

notnull

comment

'下游節點流進流量'

, rate double

notnull

comment

'下游節點流量佔上游節點比例'

,primary

key(id)

)comment

='測試'

然後插入下面的資料:

insert

into test_table

(pre_node_name, pre_node_out, next_node_name, next_node_in, rate)

values

("a"

,100

,"b",40

,0.4),

("a"

,100

,"c",60

,0.6),

("d"

,200

,"e"

,100

,0.5),

("d"

,200

,"f"

,100

,0.5

);

資料顯示為:

idpre_node_name

pre_node_out

next_node_name

next_node_in

rate1a

100b

400.42a

100c

600.63d

200e

1000.54d

200f

1000.5

在統計彙總資料的時候,怎麼統計流出的流量一共多少呢select sum(pre_node_out) from test_table肯定是錯誤的,會重複統計。答案是使用row_number() over函式。

row_number() over函式的用法

首先看看row_number() over函式的用法:

row_number(

)over([

partition

by partition_expression,..

.]order

by sort_expression [

asc|

desc],

...)

partition by語句將結果按照partition by的列進行分組,order by語句將每個分組內的資料按照那列進行排序,然後row_number()對每個分組從1開始進行編號。例如以下語句:

select

*, row_number(

)over

(partition

by pre_node_out order

by next_node_name asc

) rank from test_table order

by pre_node_name asc

得到結果:

idpre_node_name

pre_node_out

next_node_name

next_node_in

rate

rank1a

100b

400.412

a100c60

0.623d

200e

1000.514

d200

f100

0.52

回到最開始的那個問題,怎麼統計流出的流量一共多少呢?我們只要按照上游節點名進行分組,然後再統計每一組第乙個個流出的流量就可以了:

select

sum(

case

when rank=

1then pre_node_out else

0end

)from

(select

*, row_number(

)over

(partition

by pre_node_name) rank from test_table)

得到正確結果:300.

row_number() over函式的基本用法用法

sql server row_number function

row number over 分析函式

今天用到了row number over 現在就以知識點的形式總結一下,以便於以後的回顧。參考資料msdn 語法 row number over partition by value expression n order by clause 通過語法可以看出 over裡有兩個引數,partition...

row number over 分析函式

今天用到了row number over 現在就以知識點的形式總結一下,以便於以後的回顧。參考資料msdn 語法 row number over partition by value expression n order by clause 通過語法可以看出 over裡有兩個引數,partition...

ROW NUMBER OVER函式運用

語法 row number over partition by column order by column partition by 相當於資料庫中的group by 說明 row number over partition by col1 order by col2 表示根據col1分組,在分組...