??窗口函數(shù)(window functions),也叫分析函數(shù)和OLAP函數(shù),MySQL在8.0之后開(kāi)始支持窗口函數(shù)。窗口函數(shù)可以用來(lái)對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析處理,和group by有類(lèi)似之處,其區(qū)別在于窗口會(huì)對(duì)每個(gè)分組之后的數(shù)據(jù)按行進(jìn)行分別操作,而group by一般對(duì)分組之后的函數(shù)使用聚合函數(shù)匯總,做不到對(duì)不同的group中的行數(shù)據(jù)進(jìn)行分別操作。這就簡(jiǎn)單介紹幾種常見(jiàn)的MySQL窗口函數(shù)。下表中列出了幾種常見(jiàn)的窗口函數(shù),并對(duì)其基本功能進(jìn)行了描述。接下來(lái)我們會(huì)以一段示例,來(lái)展示MySQL中窗口函數(shù)的用途和效果。

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比道縣網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式道縣網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋道縣地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴(lài)。
??假設(shè)我們存在一張如下的員工工資表,接下來(lái)我們將以這張表對(duì)窗口函數(shù)的使用方法進(jìn)行簡(jiǎn)單的演示。
??窗口函數(shù)的語(yǔ)法如下,所有的窗口函數(shù)均遵循以下語(yǔ)法:
其中 frame_clause 語(yǔ)法如下。
接下來(lái)我們將展示一些場(chǎng)景的窗口函數(shù)的用法和效果。
示例: 對(duì)所有員工按照薪資降序排序,并給出對(duì)應(yīng)的row_number、rank和dense_rank的排名
示例: 對(duì)每個(gè)部門(mén)的員工按照薪資降序排序,并給出對(duì)應(yīng)的row_number、rank和dense_rank的排名
示例: 對(duì)所有員工按照薪資降序排序,并給出對(duì)應(yīng)的row_number、rank和dense_rank的排名,最終結(jié)果按照員工號(hào)進(jìn)行排序輸出。
示例: 找出每個(gè)部門(mén)工資最高的人。
示例: a.將所有員工按照工資遞增的順序分成4組。b.根據(jù)員工入職日期升序分成7組。
示例: 獲取每個(gè)部門(mén),按工資從低到高得累計(jì)和。
示例: 獲取每個(gè)部門(mén)得工資累計(jì)和。
示例: 獲取整個(gè)公司的薪資按照薪資遞增的累計(jì)和。
示例: 獲取整個(gè)公司的薪資按照薪資遞增的前兩行和后一行范圍內(nèi)的薪資和。
示例: 每個(gè)部門(mén)的平均工資。
示例: 獲取整個(gè)公司的薪資按照薪資遞增的前兩行和后一行范圍內(nèi)的薪資平均值。
示例: 根據(jù)薪資排序,獲取CUME_DIST()和PERCENT_RANK()
示例: a. 獲取每個(gè)人入職前一行的數(shù)據(jù),默認(rèn)值為"2021-01-01";b. 獲取每個(gè)人入職前兩行的數(shù)據(jù),不設(shè)置默認(rèn)值;c. 獲取每個(gè)人入職后一行的數(shù)據(jù),默認(rèn)值為"2022-01-01";d. 獲取每個(gè)人入職后兩行的數(shù)據(jù),不設(shè)置默認(rèn)值;
示例: a. 按照入職日期順序排序,找出當(dāng)前每個(gè)部門(mén)最先入職的人的薪資。b. 按照入職日期順序排序,找出當(dāng)前每個(gè)部門(mén)最后入職的人的薪資。
示例: a.獲取截至當(dāng)前工資第二高的人的工資。b.獲取第二個(gè)入職的人的工資。
查詢(xún)數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程和函數(shù)
select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE' //存儲(chǔ)過(guò)程
select `name` from mysql.proc where db = 'xx' and `type` = 'FUNCTION' //函數(shù)
show procedure status; //存儲(chǔ)過(guò)程
show function status; //函數(shù)
查看存儲(chǔ)過(guò)程或函數(shù)的創(chuàng)建代碼
show create procedure proc_name;
show create function func_name;
查看視圖
SELECT * from information_schema.VIEWS //視圖
SELECT * from information_schema.TABLES //表
查看觸發(fā)器
SHOW TRIGGERS [FROM db_name] [LIKE expr]
SELECT * FROM triggers T WHERE trigger_name=”mytrigger” \G
應(yīng)用
MySQL
時(shí),會(huì)遇到不能創(chuàng)建函數(shù)的情況。出現(xiàn)如下錯(cuò)誤信息:
復(fù)制代碼
代碼如下:
ERROR
1418
:
This
function
has
none
of
DETERMINISTIC,
NO
SQL,
or
READS
SQL
DATA
in
its
declaration
and
binary
logging
is
enabled
(you
*might*
want
to
use
the
less
safe
log_bin_trust_function_creators
variable)
那是因?yàn)闆](méi)有將功能開(kāi)啟。
開(kāi)啟MySQL函數(shù)功能:
復(fù)制代碼
代碼如下:
SET
GLOBAL
log_bin_trust_function_creators=1;
關(guān)閉MySQL函數(shù)功能:
復(fù)制代碼
代碼如下:
SET
GLOBAL
log_bin_trust_function_creators=0;
查看狀態(tài):
復(fù)制代碼
代碼如下:
show
variables
like
'%func%';
標(biāo)題名稱(chēng):mysql怎么看函數(shù)效果 mysql查看有哪些函數(shù)
瀏覽路徑:http://www.yijiale78.com/article28/ddgcdjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、關(guān)鍵詞優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、網(wǎng)站制作、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)