前沿拓展:
1、窗口函數(shù)之rank()使用場(chǎng)景:
在mysql中進(jìn)行分組(group by)后,還需要組內(nèi)排名,例如各班級(jí)成績(jī)排名、市場(chǎng)各不同小組業(yè)績(jī)排名、不同地區(qū)水果售價(jià)排名等。
2、什么是窗口函數(shù)?
窗口函數(shù),也叫OLAP函數(shù)(Online **lytical Processing),即聯(lián)機(jī)分析處理,可以對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析處理。
3、語(yǔ)法規(guī)則:select 窗口函數(shù)名稱(chēng) over (partition by 分組的列名,order by 排序的列名)as '你想取的名字'
數(shù)據(jù)庫(kù)中表demo的數(shù)據(jù)如下:
表數(shù)據(jù)參考
4、實(shí)際查詢(xún)語(yǔ)句:
特別注意:窗口函數(shù)是對(duì)where和group by子句處理后的結(jié)果進(jìn)行**作,因此按照SQL語(yǔ)句的運(yùn)行順序,窗口函數(shù)一般放在select子句中,切記!
SELECT
id,
NAME AS '姓名',
score AS '分?jǐn)?shù)',
class AS '班級(jí)',
rank() over ( PARTITION BY class ORDER BY score DESC ) AS '班級(jí)名次'
FROM
backup_c**.`demo`5、查詢(xún)結(jié)果:
查詢(xún)結(jié)果第一是按照班級(jí)class進(jìn)行分組,分組后組內(nèi)按照分?jǐn)?shù)score進(jìn)行desc降序排名排名,如下圖。
查詢(xún)結(jié)果
特別注意:如果分?jǐn)?shù)相同,排名會(huì)有跳級(jí),假設(shè)上面數(shù)據(jù)同組張三的分?jǐn)?shù)也為90分,那么他將和姓名為“安一”的并列為第一名,如下圖。
同組同分情況
6、結(jié)束:
窗口函數(shù)當(dāng)然不止這一個(gè)函數(shù),還有很多其他函數(shù),例如還有聚合函數(shù)【max(),min()】,取值函數(shù)【first_value(),nth_value()】等,那么,如何解決上面“跳級(jí)”問(wèn)題呢?后面繼續(xù)分享。
拓展知識(shí):
rank函數(shù)
第一,打開(kāi)需要修改的Exce,第二選擇需要修改的數(shù)據(jù),輸入rank公式即可排序。具體步驟如下:
1、電腦打開(kāi)Excel表格。
2、電腦打開(kāi)Excel表格后,在排名中輸入公式=RANK(J11,$J$11:J$14),$J$11:J$14是所有成績(jī)單元格的絕對(duì)值,選中單元格后按F4就會(huì)變成絕對(duì)值。
3、輸入公式后,就會(huì)得到名次,下拉**公式。
4、所有排名就都出來(lái)了。
1、**的單元格含公式或鏈接太多,**粘貼時(shí)計(jì)算量較大導(dǎo)致計(jì)算機(jī)卡**。
2、選擇**的區(qū)域太大,因?yàn)椴糠謹(jǐn)?shù)據(jù)不能體現(xiàn),導(dǎo)致系統(tǒng)計(jì)算更加復(fù)雜容易卡**。
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請(qǐng)注明出處:http://xiesong.cn/27570.html