postgreql 窗口函數(shù)用法

認(rèn)識(shí)窗口函數(shù)

在說(shuō)窗口函數(shù)之前我們先來(lái)看一個(gè)問(wèn)題:
假設(shè)我們有這樣一張products表:


Snip20171230_1.png

我們想要同時(shí)取出產(chǎn)品的名稱、售價(jià),同時(shí)列出這件產(chǎn)品對(duì)應(yīng)的商品類型的平均價(jià)格?
按照以前我們的子查詢知識(shí)我們可以這樣:

select name,
       price,
       (select avg(price) from products where type = p.type) as type_avg_price
from products p;
Snip20171230_2.png

很好!能夠正確執(zhí)行,但窗口函數(shù)有更好的辦法(可以先分類再算平均價(jià)格)

select name,
       price,
       avg(price) over (partition by type) as type_avg_price
from products;

# partition by是按照什么分類的意思
Snip20171230_3.png

這也能很好的執(zhí)行。

下面讓我們把問(wèn)題難度加大,我們需要同時(shí)取出商品名稱、價(jià)格、然后按照商品的價(jià)格在自己的品類中去排序。
如果用普通的方法比較不好做了,但窗口函數(shù)有辦法

select name,
       price,
       row_number() over (partition by type order by price) as postition
from products;

# row_number是postgresql中的排序函數(shù)
# 這里先分類,再排序
Snip20171230_4.png

窗口函數(shù)的語(yǔ)法

函數(shù)  OVER (<PARTITION BY column_name> <ORDER BY column_name>)

# 函數(shù)主要有兩種:(sum avg min max)聚合函數(shù)、(rank、dense_rank、row_number)專用窗口函數(shù)
# partition by 和 order by 都是可以省略的

小結(jié)

  • 窗口函數(shù)的關(guān)鍵點(diǎn)在于,它可以先分類再做函數(shù)操作;
  • 對(duì)比于聚合函數(shù),窗口函數(shù)具有聚合的同時(shí)保留其它列展示的功能,故稱窗口。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 2017年4月23日 晴 我今天去圖書(shū)館啦,我看了一本漫畫書(shū),里面有八路軍,他們正在攻擊日本兵,日本用大炮和飛機(jī)...
    不系之舟a閱讀 363評(píng)論 0 4
  • 記憶 或模糊或清晰 記憶總會(huì)淡忘,總要留下印記,至少證明我曾來(lái)過(guò) 我是搞*** IT的,對(duì)于一個(gè) 挨踢狗 來(lái)講,...
    Lux_Yan閱讀 344評(píng)論 3 0

友情鏈接更多精彩內(nèi)容