Hive的窗口函數

定義:
聚合函數是針對定義的行集()執行聚集,每組只返回一個值.sum()avg()max()
窗口函數也是針對定義的行集()執行聚集,可為每組返回多個值.如既要顯示聚集前的數據,又要顯示聚集后的數據.步驟:
1.將記錄分割成多個分區.
2.在各個分區上調用窗口函數.  語法:
--先執行over后面的部分,再執行over前面的部分.  
function() over (PARTITION BY(col1,col2...) ORDER BY(col3,col4...))
--函數       over  根據某條件分組,形成一個小組   再組內進行排序 
--現有一張表wt1,字段有id、name、age,數據如下
--數據
1   a1  10
2   a2  10
3   a3  10
4   a4  20
5   a5  20
6   a6  20
7   a7  20
8   a8  30

統計函數

不分區只排序

-- 窗口范圍是整個表
-- 按照age排序,每階段的age數據進行統計求和.
select id,name,age,count() over (order by age) as n from wt1;  

在這里插入圖片描述

相同字段分區、排序

-- 窗口范圍是表下按照age進行分區
-- 在分區里面,再按照age進行排序
select id,name,age,count() over (partition by age order by age) as n from wt1;  
-- 若分區和排序是同一字段時,可以省略order by語句.

在這里插入圖片描述

不同字段分區、排序

-- 窗口范圍是表下按照age進行分區
-- 在分區里面,再按照id進行排序
select id,name,age,count() over (partition by age order by id) as n from wt1;  
-- 可以根據需要對order by進行asc,desc

在這里插入圖片描述

序列函數

rank

會對相同數值,輸出相同的序號,而且下一個序號間斷,  如:1、1、3、3、5. rank(等級)  

dense_rank

會對相同數值,輸出相同的序號,而且下一個序號不間斷,如:1、1、2、2、3. dense(稠密的)

row_number

會對所有數值,輸出不同的序號,序號唯一且連續,如:1、2、3、4、5.
select id,name,age,sex,
rank() over(partition by sex order by age desc) as rk,
dense_rank() over(partition by sex  order by age desc) as drk,
row_number() over(partition by sex order by age desc) as rn
from stu;

在這里插入圖片描述

行選擇函數

-- 語法
over (rows between num 函數 and 函數)-- 關鍵詞釋義
:'
following
在后N行; following--(時間上)接著的,下述的,下列的.
preceding
在前N行; preceding--在…之前發生(或出現),先于,走在…前面.
unbounded
不限行數; unbounded--無窮的,無盡的,無限的.  
current row
當前行; current--現時發生的,當前的,現在的,通用的,流通的,流行的.
'-- 窗口中的整個范圍
rows between unbounded preceding and unbouned following
-- 從窗口的前無限行到當前行
rows between unbounded preceding and current row
-- 從窗口的當前行的前2行到當前行
rows between 2 preceding and current row
-- 從窗口的當前行到當前行的后2行
rows between current row and 2 following
-- 現有一張表sale、有y、m、rmb三個字段,數據如下
-- 數據
年份  月份  銷售額
2017    01  1000
2017    02  1000
2017    03  3000
2017    04  3000
2017    05  5000
2017    06  5000
2017    07  1000
2017    08  1000
2017    09  3000
2017    10  3000
2017    11  5000
2017    12  5000
2018    01  1000
2018    02  2000
2018    03  3000
2018    04  4000
2018    05  5000
2018    06  6000
-- 查詢當月銷售額和近三個月的銷售額
select y,m,rmb,
sum(rmb) over(order by y,m rows between 2 preceding and current row) as s
from sale;
-- 從結果可以看出,窗口函數的結果是包括本行在內的前三月的總和.

在這里插入圖片描述

-- 查詢當月銷售額和今年年初到當月的銷售額
SELECT y,m,rmb,
sum(rmb) over(partition by y order by m rows between unbounded preceding and current row) as s
from sale;

在這里插入圖片描述

值選擇函數

-- 上面知道了行選擇函數的寫法是:
sum() over(partition by xx order by xx rows between xx and xx)
-- 相類似的,值選擇函數的寫法就是:
sum() over(partition by xx order by xx range between xx and xx)? rows是物理窗口,是哪一行就是哪一行,與當前行的值(order by keykey的值)無關,只與排序后的行號相關,就是我們常規理解的那樣。
? range是邏輯窗口,與當前行的值有關(order by keykey的值),key上操作range范圍。

切片函數

-- ntile(n),用于將數據按照排序規則切分成n片,返回當前切片的序號,ntile不支持 rows between.
select y,m,rmb,ntile(2) over (partition by y order by m desc) as n from sale;

在這里插入圖片描述

-- 如果切片不均勻,默認增加第一個切片的分布.  
select y,m,rmb,ntile(5) over (order by y,m) as n from sale;

在這里插入圖片描述

lag、lead分析函數

-- lag和lead分析函數可以在同一次查詢中取出同一字段的前N行的數據(Lag)和后N行的數據(Lead)作為獨立的列。
-- 這種操作可以代替表的自聯接,并且LAG和LEAD有更高的效率,其中over()表示當前查詢的結果集對象,括號里面的語句則表示對這個結果集進行處理.-- 函數介紹
LAG
LAG(col,n,DEFAULT) 用于統計窗口內往上第n行值
參數1為列名,參數2為往上第n行(可選,默認為1),參數3為默認值(當往上第n行為NULL時候,取默認值,如不指定,則為NULL)LEAD
與LAG相反
LEAD(col,n,DEFAULT) 用于統計窗口內往下第n行值
參數1為列名,參數2為往下第n行(可選,默認為1),參數3為默認值(當往下第n行為NULL時候,取默認值,如不指定,則為NULL).
select y,m,rmb,
lag(rmb,1) over(partition by y order by m) as lag_rmb,
lead(rmb,1) over(partition by y order by m) as lead_rmb
from sale;

first_value()、last_value()取值函數

-- first_value() 的結果容易理解,直接在結果的所有行記錄中輸出同一個滿足條件的首個記錄;-- last_value() 默認統計范圍: rows between unbounded preceding and current row,也就是取當前行數據與當前行之前的數據的比較,如果需要在結果的所有行記錄中輸出同一個滿足條件的最后一個記錄,在order by 條件的后面加上語句:rows between unbounded preceding and unbounded following。
select y,m,rmb,
first_value(rmb) over(partition by y order by rmb desc) as rmb_first,
last_value(rmb) over(partition by y order by rmb desc rows between unbounded preceding and unbounded following) as rmb_last
from sale;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13723.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13723.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

word-表格疑難雜癥診治

一、用表格進行排版圖片、制作公文頭 可以在插入圖片時固定列寬 二、表格中的疑難雜癥 問題一:表格超過頁面,右側文字看不見 解決:表格窗口-布局-自動調整-根據窗口自動調整表格 問題二:表格底部文字被遮擋 解決:布…

ArcGIS Maps SDK for JS:使用queryFeatures方法查詢 FeatureLayer 中符合條件的要素

文章目錄 方式一:使用featureLayer.createQuery()方法方式二:使用 Query 構造函數方式三:簡化寫法 要想查詢FeatureLayer 圖層中滿足某些條件的要素,可以使用ArcGIS API for JavaScript 提供的queryFeatures() 方法和 Query 對象進…

【linux】yumvim工具理解使用

目錄 Linux 軟件包管理器 yum 關于 rzsz 注意事項 查看軟件包 Linux開發工具 Linux編輯器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 簡單vim配置 配置文件的位置 sudo提權 Linux 軟件包管理器 yum 1.yum是什么&#xff1…

攻防世界---web---warmup

1、題目描述 2、查看源碼,發現有個source.php 3、訪問該文件,得到這一串代碼 4、分析代碼 5、訪問hint.php,提示flag在ffffllllaaaagggg這個文件下 6、構造payload ?filesource.php?/../../../../../../ffffllllaaaagggg

Fitting Parameterized Three-Dimensional Models to Images

摘要 基于模型的識別和運動跟蹤依賴于解決投影和模型參數,使其最佳適應匹配的2D圖像特征的3D模型的能力。本文將當前的參數求解方法擴展到處理具有任意曲面和任意數量的內部參數(表示關節、可變尺寸或表面變形)的對象。開發了數值穩定化方法…

懶人網址導航頁 search.html SQL注入漏洞復現

0x01 產品簡介 懶人網址導航系統是一種智能化的網址導航平臺,旨在幫助用戶快速找到所需的網址和資源。該系統提供了智能化的網址搜索和推薦功能,能夠根據用戶的搜索習慣和偏好推薦相關的網址和資源。同時,系統還提供了網址分類、網址收藏和網址分享等功能,方便用戶管理和共…

git常見的18條指令

使用git的時候有沒有遺忘指令的情況呢?小編替大家整理出來了18條常用的指令,大家趕緊收藏起來吧! gti常見的18條指令 序號指令含義1git init初始化一個倉庫2git clone [url]克隆一個倉庫3git add [file]添加文件到暫存區4git commit -m "…

簡易Docker磁盤使用面板Doku

這個項目似乎有 1 年多沒更新了,最后發布版本的問題也沒人修復,所以看看就行,不建議安裝 什么是 Doku ? Doku 是一個簡單、輕量級的基于 Web 的應用程序,允許您以用戶友好的方式監控 Docker 磁盤使用情況。Doku 顯示 D…

easyexcel導出動態標題,以及動態設置下拉選擇,并設置下拉選擇校驗

目錄 1.說明 2.示例 3.總結 1.說明 平時使用easyexcel進行導出時,標題的名字通過在表的實體類上添加注解的方式進行實現,然后傳入表的實體類的集合進行下載即可。 有這么一個需求,用戶可以自定義導出的模板,也就是說導出的模板…

南京沁恒微USB HUB CH334/CH335多種封裝規格選擇,外圍簡單,價格還美麗

概述: CH334 和 CH335 是符合 USB2.0 協議規范的 全速,下行端口支持 USB2.0 高速 480Mbps 個 TT 分時調度 4 個下行端口),還支持高性能的 工業級設計,外圍精簡,可應用于計算機和工控機主板 特點&#xff1…

精品UI響應式視頻教程知識付費系統源碼在線教育網絡課程在線點播可二開分銷分站功能

這是一款知識付費平臺模板,后臺可上傳本地視頻,批量上傳視頻連接, 視頻后臺可設計權限觀看,免費試看時間時長,會員等級觀看,付費觀看等功能, 也帶軟件app權限下載,幫助知識教育和軟件…

域名郵箱是什么?怎么注冊公司的域名郵箱?

擁有一個專業、獨特的郵箱地址不僅能提升企業形象,還能增強客戶信任感。域名郵箱是什么?域名郵箱也稱為企業郵箱或定制郵箱,是一種基于企業自主域名設置的電子郵件服務。本文將詳細介紹域名郵箱的概念、優勢以及如何注冊公司的域名郵箱 一、…

事務的ACID是什么及扁平化事務、鏈式事務

一、什么是事務 1.事務(Transaction)是區別于數據庫文件系統的重要特性之一。事務會把數據庫從一種一致狀態轉換為另一種一致狀態。在數據庫提交工作時,可以確保要么所有修改都已經保存,要么所有修改都不保存。 2.InnoDB存儲引擎中的事物完…

WPF實現搜索文本高亮

WPF實現搜索文本高亮 1、使用自定義的TextBlock public class HighlightTextblock : TextBlock{public string DefaultText { get; set; }public string HiText{get { return (string)GetValue(HiTextProperty); }set { SetValue(HiTextProperty, value); }}// Using a Depend…

31.@Anonymous

1?@Anonymous原理 大家應該已經習慣我的教學套路,很多時候都是先使用,然后講述原理。 上節課我們使用了注解@Anonymous,然后接口就可以直接被訪問到了,不用token!不用token!不用token!。 我們一般知道,注解是給程序看的,給機器看的,當然也是給程序員看的。注解如果…

詳解HTML

目錄 1.HTML 結構 1.1認識HTML標簽 1.2標簽層次結構 1.3快速生成代碼框架 2.HTML常見標簽 2.1注釋標簽 2.2標題標簽:h1-h6 2.3段落標簽:p 2.4換行標簽:br 2.5格式化標簽 2.6圖片標簽:img 2.7超鏈接標簽 2.8表格標簽…

全域運營是本地生活的下半場?新的創業風口來了?

隨著全域概念的興起,全域運營賽道也逐漸進入人們的視野之中,甚至有業內人士預測,全域運營將會是本地生活下半場的大趨勢。 之所以這么說,是因為全域運營作為包含了公域和私域內所有運營業務的新模式,不僅能同時做所有本…

設計模式-解釋器模式

作者持續關注 WPS二次開發專題系列,持續為大家帶來更多有價值的WPS開發技術細節,如果能夠幫助到您,請幫忙來個一鍵三連,更多問題請聯系我(QQ:250325397) 定義 解釋器模式(Interpreter Pattern&…

vue3 組件刷新

在 Vue 3 中&#xff0c;如果你想刷新一個組件&#xff0c;有幾種方法可以實現。 使用 key 屬性: 當你想要強制重新渲染一個組件時&#xff0c;你可以為其添加一個獨特的 key 屬性。當 key 屬性的值改變時&#xff0c;Vue 會強制組件重新創建。 <template> <MyComp…

jQuery 中的toggleClass應用 (含代碼)

直接上代碼 <!DOCTYPE html> <html><head><style>.info {color: green;}</style></head><body><input type"button" value"點擊" onclick"changeClass()" /><div id"x1">例子…