Oracle中窗口函數over()的學習

Oracle中窗口函數over()的學習

       近一個月沒有寫博客了,今天學習了一下Oracle中窗口函數的使用,所以將自己的學習心得分享給大家。

        使用窗口函數可以解決一些問題。比如說如果我們有兩張表,一張教師的表,一張系的表,如果我們想查詢每個系的老師的平均工資,這當然沒什麼問題,但是如果加上同時把老師的信息查詢出來,那麼就麻煩了,我們需要將每個系的老師的平均工資看成一張臨時表,來和原先的老師的表進行連接查詢;或者說查詢每個系工資最高的老師的信息,有些的時候,像這種分組的,多表的,統計的,經常涉及查詢每個查詢的具體信息,寫的時候增加了我們的難度,如果使用窗口函數,再配合一些其他的函數使用,很簡單的就可以解決這個問題。

有時候查詢,我們需要將我們的結果顯示在每條記錄裏,oracle中的這個窗口函數就可以解決這個問題。

窗口函數的名字是over()函數,常用的有兩個屬性partition byorder bypartition by類似於group by,我們通常將group by叫做分組,而partition by稱作分區,分組返回通常是一行,partition by返回的是多行。

如果將Oracle中的這個over()函數和其他的函數聯合使用將會發揮更大的作用,比如最值的問題,獲取其他行的數據等。

1、和統計函數(聚合函數)使用

可以和count() sum() avg() min() max()這些函數使用,這樣在查詢市,還可以顯示每條記錄的信息,比如說查詢每個系的老師的平均工資和老師的信息,如圖所示:

2、和排名函數使用

有時在後臺查詢數據庫時,需要向前臺那樣顯示序號,oracle提供了三個函數,搭配over()函數更有用。如圖所示:

3、和錯行的函數使用

Oracle中有兩個類似於錯行的行數,在本行可以取到其他行的數據。lead 函數和lag函數。如圖所示:

4、取最值的函數first_value()

通過和該函數的聯合使用,可以解決最值問題。常用的有兩外的屬性值。

無論是那種方式都會在查詢的記錄上添加一列的信息,有時候需要這種需求,使用這個函數還可以解決使用group by時,只能查詢分組的字段值的問題。

發佈了91 篇原創文章 · 獲贊 632 · 訪問量 101萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章