方法/步驟
湘東網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),湘東網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為湘東上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的湘東做網(wǎng)站的公司定做!
首先,計算字符串的字符數(shù),可以用char_length()函數(shù),代碼如下:
select 'zhangsan',char_length('zhangsan');
如下圖所示:
字符串中的length()函數(shù),用來計算字符串的長度,代碼如下:
select 'zhangsan',length('zhangsan1111');
如下圖所示:
字符串函數(shù)中有時需要將幾個不同的字符串拼接在一起,這時可以利用concat(a1,a2,...)和concat_ws(b,b1,b2,...),可以將各字符串合并成一個字符串,代碼如下:
select concat('zhang','san','feng');
select concat_ws('*','zhang','san','feng');
函數(shù)concat。distinct是mysql中去重最常用的方法,有自己的局限性。是統(tǒng)計的是每條數(shù)據(jù)重復(fù)的次數(shù)拼接函數(shù)concat個函數(shù)較簡單的。多項式的次數(shù)是指次數(shù)最高的項的次數(shù)。單項式的次數(shù)是指單項式所有字母。
分別在 MySQL5.7.25-log 和 8.0.16 環(huán)境中實現(xiàn)類似Oracle的分析函數(shù)(8.0版本中已支持,直接使用即可)。
一、創(chuàng)建測試數(shù)據(jù)
二、row_number() over()
三、rank() over()
四、dense_rank() over()
五、lag() over()
六、lead() over()
七、待補(bǔ)充
例1:不分組,全部數(shù)據(jù)添加序列號,類Oracle 的rownum偽列
例2:先按roomid分組,再按照deviceid,counter排序,類Oracle 的row_number() OVER(PARTITION BY ORDER BY )
例1:不分組,全部數(shù)據(jù)按 roomid 排序,再添加序號,類Oracle 的rank() OVER(ORDER BY)
例2:先按roomid分組,再按deviceid排序,類Oracle 的rank() OVER(PARTITION BY ORDER BY)
例1:不分組,全部數(shù)據(jù)按roomid排序,再添加序號,類Oracle 的dense_rank() OVER(ORDER BY)
例2:先按roomid分組,再按deviceid排序,類Oracle 的dense_rank() OVER(PARTITION BY ORDER BY)
例1:不分組,全部數(shù)據(jù)按roomid,deviceid升序排序,類Oracle 的lag() OVER(ORDER BY)
例2:先按roomid分組,再按roomid,deviceid排序,類Oracle 的lag() OVER(PARTITION BY ORDER BY)
例1:不分組,全部數(shù)據(jù)按roomid,deviceid,counter升序排序,類Oracle 的lead() OVER(ORDER BY)
例2:先按roomid分組,再按deviceid,counter排序,類Oracle 的lead() OVER(PARTITION BY ORDER BY)
??窗口函數(shù)(window functions),也叫分析函數(shù)和OLAP函數(shù),MySQL在8.0之后開始支持窗口函數(shù)。窗口函數(shù)可以用來對數(shù)據(jù)進(jìn)行實時分析處理,和group by有類似之處,其區(qū)別在于窗口會對每個分組之后的數(shù)據(jù)按行進(jìn)行分別操作,而group by一般對分組之后的函數(shù)使用聚合函數(shù)匯總,做不到對不同的group中的行數(shù)據(jù)進(jìn)行分別操作。這就簡單介紹幾種常見的MySQL窗口函數(shù)。下表中列出了幾種常見的窗口函數(shù),并對其基本功能進(jìn)行了描述。接下來我們會以一段示例,來展示MySQL中窗口函數(shù)的用途和效果。
??假設(shè)我們存在一張如下的員工工資表,接下來我們將以這張表對窗口函數(shù)的使用方法進(jìn)行簡單的演示。
??窗口函數(shù)的語法如下,所有的窗口函數(shù)均遵循以下語法:
其中 frame_clause 語法如下。
接下來我們將展示一些場景的窗口函數(shù)的用法和效果。
示例: 對所有員工按照薪資降序排序,并給出對應(yīng)的row_number、rank和dense_rank的排名
示例: 對每個部門的員工按照薪資降序排序,并給出對應(yīng)的row_number、rank和dense_rank的排名
示例: 對所有員工按照薪資降序排序,并給出對應(yīng)的row_number、rank和dense_rank的排名,最終結(jié)果按照員工號進(jìn)行排序輸出。
示例: 找出每個部門工資最高的人。
示例: a.將所有員工按照工資遞增的順序分成4組。b.根據(jù)員工入職日期升序分成7組。
示例: 獲取每個部門,按工資從低到高得累計和。
示例: 獲取每個部門得工資累計和。
示例: 獲取整個公司的薪資按照薪資遞增的累計和。
示例: 獲取整個公司的薪資按照薪資遞增的前兩行和后一行范圍內(nèi)的薪資和。
示例: 每個部門的平均工資。
示例: 獲取整個公司的薪資按照薪資遞增的前兩行和后一行范圍內(nèi)的薪資平均值。
示例: 根據(jù)薪資排序,獲取CUME_DIST()和PERCENT_RANK()
示例: a. 獲取每個人入職前一行的數(shù)據(jù),默認(rèn)值為"2021-01-01";b. 獲取每個人入職前兩行的數(shù)據(jù),不設(shè)置默認(rèn)值;c. 獲取每個人入職后一行的數(shù)據(jù),默認(rèn)值為"2022-01-01";d. 獲取每個人入職后兩行的數(shù)據(jù),不設(shè)置默認(rèn)值;
示例: a. 按照入職日期順序排序,找出當(dāng)前每個部門最先入職的人的薪資。b. 按照入職日期順序排序,找出當(dāng)前每個部門最后入職的人的薪資。
示例: a.獲取截至當(dāng)前工資第二高的人的工資。b.獲取第二個入職的人的工資。
1、value函數(shù)
用法:select value(id,'') from merchant ;
如果id為空,返回空,如果id不為空,返回id的值;
2、nvl函數(shù)
用法:select nvl(id,'') from merchant ;
如果id為空,返回空,如果id不為空,返回id的值;
3、substr函數(shù)
用法:select substr(src_ip,1,2) from tbl_sybvclear_txn;
從src_ip第一位開始,取兩位;
4、length函數(shù)
用法:select length(src_ip) from tbl_sybvclear_txn;
計算字符串的長度,不必贅述;
5、ltrim函數(shù),rtrim函數(shù)
用法:去掉左側(cè),右側(cè)的空格;
6、letf函數(shù),right函數(shù)
用法:select left(src_ip,3),right(src_ip,3) from tbl_sybvclear_txn;
取src_ip左邊3個,右邊3個字符串;
7、concat函數(shù)
用法:select concat(src_ip,chl_resp) from tbl_sybvclear_txn;
字符串連接,mysql支持三個以上參數(shù),db2只支持兩個參數(shù);
8、replace函數(shù)
用法:select src_ip,replace(src_ip,'223','55') from tbl_sybvclear_txn;
把src_ip中223全部替換成55;
9、to_char函數(shù),to_date函數(shù),to_timestamp函數(shù)
用法:將數(shù)值型轉(zhuǎn)成字符型
10、avg函數(shù)
用法:select avg(mcht_fee) from tbl_sybvclear_txn;
返回mcht_fee平均值;
11、count函數(shù)
用法:太常用,不贅述;
12、sum函數(shù)
用法:太常用,不贅述;
13、max函數(shù),min函數(shù)
用法:取某列的最大值,最小值;