1.字符串函數(shù)
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),潛山企業(yè)網(wǎng)站建設(shè),潛山品牌網(wǎng)站建設(shè),網(wǎng)站定制,潛山網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,潛山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
char_lengt()
concat()
instr()
lcase()
left()
ltrim()
mid()
2.時(shí)間函數(shù)
now()
curdate()
curtime()
datediff()
date_add()
數(shù)學(xué)函數(shù)
abs()
ceiling()
floor()
pow()
rand()
round()
其他函數(shù)
md5()
version()
database()
UUID()
同一使用select 函數(shù)名(參數(shù)列表)
調(diào)用如:select 函數(shù)名(參數(shù)列表)。
mysql中的UDF(自定義函數(shù)),可以寫好一些方法或?函數(shù),然后進(jìn)行調(diào)用,而且是在SQL語(yǔ)句中可以進(jìn)行調(diào)用。?
DROP FUNCTION CalculateAmount?
CREATE FUNCTION CalculateAmount(userid INT) RETURNS float(10,2)?
BEGIN?
DECLARE totalCredits FLOAT;?
SELECT SUM(amount) INTO totalAmount FROM credit_user WHERE id =userid;?
RETURN totalAmount;?
END?
要注意的是,在UDF中,不要定義與數(shù)據(jù)表中重名的列。而在SQL中,?則可以像SELECT CalculateAmount(1);那樣去調(diào)用了。
LAG()函數(shù)是一個(gè)窗口函數(shù),允許您從當(dāng)前行向前看多行數(shù)據(jù)。與LEAD()函數(shù)類似,LEAD()函數(shù)對(duì)于計(jì)算同一結(jié)果集中當(dāng)前行和后續(xù)行之間的差異非常有用。
LAG語(yǔ)法: LAG(列名,[offset], [default_value]) OVER ( PARTITION BY 列名,... ORDER BY 列名 [ASC|DESC],... )
LEAD語(yǔ)法: LEAD(列名,[offset], [default_value]) OVER ( PARTITION BY 列名,... ORDER BY 列名 [ASC|DESC],... )
offset:offset是從當(dāng)前行偏移的行數(shù),以獲取值。offset必須是一個(gè)非負(fù)整數(shù)。如果offset為零,則LEAD()函數(shù)計(jì)算當(dāng)前行的值。如果省略 offset,則LEAD()函數(shù)默認(rèn)使用一個(gè)。
default_value:如果沒(méi)有后續(xù)行,則LEAD()函數(shù)返回default_value。例如,如果offset是1,則最后一行的返回值為default_value。如果您未指定default_value,則函數(shù)返回 NULL 。
PARTITION BY子句:PARTITION BY子句將結(jié)果集中的行劃分LEAD()為應(yīng)用函數(shù)的分區(qū)。如果PARTITION BY未指定子句,則結(jié)果集中的所有行都將被視為單個(gè)分區(qū)。
ORDER BY子句:ORDER BY子句確定LEAD()應(yīng)用函數(shù)之前分區(qū)中行的順序。
用途舉例:
ps:
不適合計(jì)算留存,舉例說(shuō)明:
求3日留存用戶,以下為用戶登錄表login_history_table:
首先使用LEAD函數(shù)對(duì)用戶登錄時(shí)間做偏移,SQL如下:
結(jié)果如下:
根據(jù)上面查詢到的結(jié)果,3日留存用戶中不能統(tǒng)計(jì)到abc,而實(shí)際應(yīng)該包含abc,因?yàn)樵撚脩?0211022登錄后,在3天后的20211025日又重新登錄了。
MySQL的窗口函數(shù)最主要作用是對(duì)數(shù)據(jù)進(jìn)行分組操作(可以進(jìn)行分組排序,求TopN,移動(dòng)平均,聚合計(jì)算等),也就是相當(dāng)于說(shuō)在當(dāng)前的詳細(xì)級(jí)別視圖里,對(duì)更低級(jí)別的數(shù)據(jù)進(jìn)行計(jì)算呈現(xiàn)(可以與Tableau的表計(jì)算函數(shù)進(jìn)行對(duì)比學(xué)習(xí)),比如說(shuō)目前的表格是全國(guó)數(shù)據(jù),但是要對(duì)不同省份的數(shù)據(jù)進(jìn)行分組計(jì)算,這個(gè)時(shí)候使用窗口函數(shù)就會(huì)很方便。
在MySQL中,窗口函數(shù)要在8.0版本之后才能使用,如果是低版本的話,只能使用設(shè)置變量的方式完成以上內(nèi)容的實(shí)現(xiàn),設(shè)置變量在邏輯上會(huì)比窗口函數(shù)更加難以理解和使用,使用窗口函數(shù)可以大大的提高效率。
在很多SQL的教程中,說(shuō)到窗口函數(shù)的時(shí)候,都只是說(shuō)窗口函數(shù)的排序優(yōu)勢(shì)而已,但是在實(shí)際工作中,其用處遠(yuǎn)遠(yuǎn)不止這些。
以下為窗口函數(shù)的情況:
??窗口函數(shù)(window functions),也叫分析函數(shù)和OLAP函數(shù),MySQL在8.0之后開始支持窗口函數(shù)。窗口函數(shù)可以用來(lái)對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析處理,和group by有類似之處,其區(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ù)的用途和效果。
??假設(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è)部門的員工按照薪資降序排序,并給出對(duì)應(yīng)的row_number、rank和dense_rank的排名
示例: 對(duì)所有員工按照薪資降序排序,并給出對(duì)應(yīng)的row_number、rank和dense_rank的排名,最終結(jié)果按照員工號(hào)進(jìn)行排序輸出。
示例: 找出每個(gè)部門工資最高的人。
示例: a.將所有員工按照工資遞增的順序分成4組。b.根據(jù)員工入職日期升序分成7組。
示例: 獲取每個(gè)部門,按工資從低到高得累計(jì)和。
示例: 獲取每個(gè)部門得工資累計(jì)和。
示例: 獲取整個(gè)公司的薪資按照薪資遞增的累計(jì)和。
示例: 獲取整個(gè)公司的薪資按照薪資遞增的前兩行和后一行范圍內(nèi)的薪資和。
示例: 每個(gè)部門的平均工資。
示例: 獲取整個(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è)部門最先入職的人的薪資。b. 按照入職日期順序排序,找出當(dāng)前每個(gè)部門最后入職的人的薪資。
示例: a.獲取截至當(dāng)前工資第二高的人的工資。b.獲取第二個(gè)入職的人的工資。
rand() 隨機(jī)生成 0 - 1的浮點(diǎn)數(shù) , 常與其他函數(shù)結(jié)合使用 ,比如?ceiling,floor,LPAD 等
如果要指定指定范圍的隨機(jī)整數(shù)的話,需要用這個(gè)公式FLOOR(i?+?RAND()?*?j),比如?
# 生成 7 - 11的隨機(jī)數(shù)? SELECT FLOOR(7 + (RAND() * 5));
floor 地板; 取小于該值的最大整數(shù) ,比如 0
mysql select floor(1.23),floor(-1.23);
1? ? ? ? ? ?-2?
ceiling 則相反,向上取整,取大于該值的最小整數(shù) ,比如
SELECT CEILING(1.23); # 2
SELECT CEIL(-1.23); # -1
lpad 是左填充, 用法如下 :
LPAD(RAND()*31 + 1,2,'0')) # 取01-31的隨機(jī)整數(shù) ,保留兩位,如果是一位,左邊填0
標(biāo)題名稱:mysql的函數(shù)怎么使用,mysql存儲(chǔ)函數(shù)用法
URL地址:http://m.rwnh.cn/article6/dscocig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站策劃、網(wǎng)站營(yíng)銷、響應(yīng)式網(wǎng)站、App開發(fā)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)