国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Postgresql窗口函數(shù)(一)

李義 / 1690人閱讀

摘要:和聚合函數(shù)類似,窗口函數(shù)也是計(jì)算一些行集合多個(gè)行組成的集合,我們稱之為窗口的數(shù)據(jù)。但如果這些窗口函數(shù)的作用是一樣的,那分開寫多個(gè)很煩人,也容易出錯(cuò)。

聚合函數(shù)大家都用過(guò),像sum,min,avg等,一般是和group by配合使用。和聚合函數(shù)類似,窗口函數(shù)也是計(jì)算一些行集合(多個(gè)行組成的集合,我們稱之為窗口window frame)的數(shù)據(jù)。但和常規(guī)的聚集函數(shù)不同的是,窗口函數(shù)不會(huì)將參與計(jì)算的行合并成一行輸出,而是將計(jì)算出來(lái)的結(jié)果帶回到了計(jì)算行上。

比如我們要想將員工的工資和該部門的平均工資進(jìn)行比較。傳統(tǒng)的作法是先通過(guò)group by 統(tǒng)計(jì)出部門平均工資,再用員工表左連一下上面的統(tǒng)計(jì)結(jié)果。

with dep_avg_salary as (
    select dept_name as dept_name, avg(salary) as dep_avg_salary
      from emp_salary
     group by dept_name 
)
select e.dept_name, e.emp_no, e.salary, das.dep_avg_salary
  from emp_salary e
  left join dep_avg_salary das on das.dept_name = e.dept_name       
 order by e.dept_name

使用窗口函數(shù)可以簡(jiǎn)化很多

SELECT dept_name, 
       emp_no, 
       salary, 
       avg(salary) OVER (PARTITION BY dept_name) as dep_avg_salary
FROM emp_salary;

我們看到這里列出的還是員工的數(shù)據(jù),只是加上了根據(jù)depname分組統(tǒng)計(jì)的平均工資。

特別注意:

窗口函數(shù)只能在SELECT和ORDER BY子句中使用,不能在任何其他地方使用,比如GROUP BY、HAVING和WHERE子句

窗口函數(shù)必須和over字句配合使用。over子句包含PARTITION BY和ORDER BY兩部分,分別用來(lái)分組和確定組內(nèi)輸出順序,PARTITION BY和ORDER BY都是可選的。

如果兩個(gè)都省略的,整個(gè)表會(huì)被作為一個(gè)分組,查詢出來(lái)的是所有員工的平均工資,這個(gè)還好理解。

如果省略PARTITION BY,而包含ORDER BY呢?

這個(gè)結(jié)果是不是很詭異?

對(duì)比之前的查詢結(jié)果,第一組”develop”的avg_salary(5660)是“develop”部門的平均工資,第三組“sales”的值(5218.18)是所有員工的平均工資,那第二組“personnel”的值(5114.28)是什么呢?怎么產(chǎn)生的呢?

啊,盡然是“develop”和“personnel”兩個(gè)部門的平均工資。這樣的話第三組是所有員工的平均工資就說(shuō)的通了,它是“develop”、“personnel”和“sales”三個(gè)部門的平均工資。小伙伴們使用的時(shí)候要特別注意呀。

如果一個(gè)查詢中包含多個(gè)窗口函數(shù),那么我們可以寫多個(gè)OVER子句。但如果這些窗口函數(shù)的作用是一樣的,那分開寫多個(gè)很煩人,也容易出錯(cuò)。這種情況下,我們可以將窗口里面的內(nèi)容寫成一個(gè)WINDOW子句,然后在多個(gè)OVER子句中引用。比如我們列一下部門的平均工資和最高工資:

使用windows字句,可以是這樣:

最后說(shuō)一句:

所有的聚合函數(shù)都可以作為窗口函數(shù)使用

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38969.html

相關(guān)文章

  • Postgresql窗口函數(shù)

    摘要:和聚合函數(shù)類似,窗口函數(shù)也是計(jì)算一些行集合多個(gè)行組成的集合,我們稱之為窗口的數(shù)據(jù)。但如果這些窗口函數(shù)的作用是一樣的,那分開寫多個(gè)很煩人,也容易出錯(cuò)。 聚合函數(shù)大家都用過(guò),像sum,min,avg等,一般是和group by配合使用。和聚合函數(shù)類似,窗口函數(shù)也是計(jì)算一些行集合(多個(gè)行組成的集合,我們稱之為窗口window frame)的數(shù)據(jù)。但和常規(guī)的聚集函數(shù)不同的是,窗口函數(shù)不會(huì)將參與...

    李昌杰 評(píng)論0 收藏0
  • Postgresql窗口函數(shù)(二)

    摘要:在上一篇里,主要窗口函數(shù)的基本用法。在這一篇中,我們來(lái)看看除了聚合函數(shù)之外還支持哪些窗口函數(shù)吧。注意到雖然為和的員工,相同,但返回的行號(hào)仍然連續(xù)。返回分組后的行號(hào),但和和函數(shù)都不同,當(dāng)對(duì)比值重復(fù)時(shí)行號(hào)重復(fù)但不間斷。 在上一篇里,主要窗口函數(shù)的基本用法。 在這一篇中,我們來(lái)看看postgresql除了聚合函數(shù)之外還支持哪些窗口函數(shù)吧。 row_number() 返回分組后的行號(hào)。注意到雖...

    Achilles 評(píng)論0 收藏0
  • Postgresql窗口函數(shù)(二)

    摘要:在上一篇里,主要窗口函數(shù)的基本用法。在這一篇中,我們來(lái)看看除了聚合函數(shù)之外還支持哪些窗口函數(shù)吧。注意到雖然為和的員工,相同,但返回的行號(hào)仍然連續(xù)。返回分組后的行號(hào),但和和函數(shù)都不同,當(dāng)對(duì)比值重復(fù)時(shí)行號(hào)重復(fù)但不間斷。 在上一篇里,主要窗口函數(shù)的基本用法。 在這一篇中,我們來(lái)看看postgresql除了聚合函數(shù)之外還支持哪些窗口函數(shù)吧。 row_number() 返回分組后的行號(hào)。注意到雖...

    546669204 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<