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

資訊專欄INFORMATION COLUMN

Postgresql窗口函數(一)

李義 / 1683人閱讀

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

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

比如我們要想將員工的工資和該部門的平均工資進行比較。傳統的作法是先通過group by 統計出部門平均工資,再用員工表左連一下上面的統計結果。

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

使用窗口函數可以簡化很多

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

我們看到這里列出的還是員工的數據,只是加上了根據depname分組統計的平均工資。

特別注意:

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

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

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

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

這個結果是不是很詭異?

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

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

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

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

最后說一句:

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38969.html

相關文章

  • Postgresql窗口函數

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

    李昌杰 評論0 收藏0
  • Postgresql窗口函數(二)

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

    Achilles 評論0 收藏0
  • Postgresql窗口函數(二)

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

    546669204 評論0 收藏0

發表評論

0條評論

李義

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<