最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

sql中常見(jiàn)的四種排名函數(shù)的用法

 更新時(shí)間:2023年10月17日 11:47:03   作者:豬無(wú)戒_  
本文主要介紹了sql中常見(jiàn)的四種排名函數(shù)的用法,主要包括row_number,rank,dense_rank,ntile,具有一定的參考價(jià)值,感興趣的可以了解一下

四個(gè)排名函數(shù):
1.row_number
2.rank
3.dense_rank
4.ntile

1. ROW_NUMBER(排名場(chǎng)景推薦)

1.1 介紹

在 SQL 中,ROW_NUMBER() 是一個(gè)窗口函數(shù),它為結(jié)果集中的每一行分配一個(gè)唯一的序號(hào)。該函數(shù)的語(yǔ)法如下:

ROW_NUMBER() OVER (ORDER BY column1 [, column2, ...])

其中,ORDER BY 子句指定了 ROW_NUMBER() 函數(shù)排列行的順序。如果省略 ORDER BY,則序號(hào)將按照結(jié)果集中的任意順序進(jìn)行分配。

1.2 使用場(chǎng)景及例子

1.2.1 排名
通過(guò)order by進(jìn)行排序得到排名。

SELECT
	id,
	name,
	score,
	row_number() OVER(
	ORDER BY score DESC) AS ranks
FROM
	student_info

1.2.2 去重
可以使用 ROW_NUMBER() 函數(shù)去除重復(fù)記錄。例如,在一個(gè)表中,有重復(fù)記錄,想要保留每個(gè)記錄的唯一編號(hào)

SELECT id, column1, column2, ...
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY id) AS row_num
    FROM table_name
) subquery
WHERE row_num = 1;

1.2.3 分頁(yè)查詢
大可不必,不建議使用。

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY id) AS row_num
    FROM table_name
) subquery
WHERE row_num BETWEEN 11 AND 20;

2. RANK

2.1 介紹

在SQL中,RANK()是一個(gè)窗口函數(shù),用于根據(jù)指定的ORDER BY子句給結(jié)果集中的每一行分配排名值。在排序過(guò)程中,如果有多個(gè)行具有相同的排序值,則它們將被分配相同的排名值。RANK()可以在SELECT語(yǔ)句的SELECT子句、ORDER BY子句或OVER()子句中使用。

以下是RANK()的語(yǔ)法:

RANK() OVER ( [PARTITION BY partition_expression, ... [n]]
ORDER BY sort_expression [ASC|DESC], ... [n] )

在這個(gè)語(yǔ)法中,PARTITION BY子句可選,它用于將結(jié)果集分割成不同的分區(qū),然后對(duì)每個(gè)分區(qū)的行進(jìn)行排名。如果省略PARTITION BY,則所有行將合并成一個(gè)分區(qū),然后進(jìn)行排名。
排序表達(dá)式是必需的,可以指定一個(gè)或多個(gè)表達(dá)式以排序行。SORT_EXPRESSION可以是列名稱、函數(shù)、常量或表達(dá)式。

2.2 使用場(chǎng)景及例子

2.2.1 排名
通過(guò)order by進(jìn)行排序得到排名。

SELECT
	id,
	name,
	score,
	RANK() OVER(
	ORDER BY score DESC) AS ranks
FROM
	student_info

2.2.2 分組排名

SELECT
	id,
	name,
	score,
	RANK() OVER(PARTITION BY name
	ORDER BY score DESC) AS ranks
FROM
	student_info

PARTITION BY子句指定了name列作為分區(qū)表達(dá)式,ORDER BY子句按score列降序排序。

但使用RANK排名有個(gè)問(wèn)題,即字段內(nèi)容相同時(shí),會(huì)得到相同名次,并且后續(xù)會(huì)跳過(guò)幾個(gè)名次,如圖:

3. DENSE_RANK

3.1 介紹

DENSE_RANK()是SQL中的一個(gè)窗口函數(shù)(window function),用于查詢結(jié)果中的排名。與RANK()類似,不同之處在于DENSE_RANK()不會(huì)出現(xiàn)相同的排名。即使有多個(gè)值排名相同,緊隨其后的排名也會(huì)按照定義進(jìn)行遞增。解決RANK的問(wèn)題。

3.2 使用場(chǎng)景及例子

3.2.1 排名
通過(guò)order by進(jìn)行排序得到排名。

SELECT
	id,
	name,
	score,
	DENSE_RANK() OVER(
	ORDER BY score DESC) AS ranks
FROM
	student_info

4. NTILE

4.1 介紹

NTILE函數(shù)用于將一組數(shù)據(jù)按照數(shù)量均勻地分成若干份,并給每份數(shù)據(jù)編號(hào)。常見(jiàn)的用途是將數(shù)據(jù)進(jìn)行分組或劃分。
語(yǔ)法:

NTILE(n) OVER (ORDER BY expr)

其中n:指定將數(shù)據(jù)分成的份數(shù)。ORDER BY expr:指定按照哪個(gè)表達(dá)式來(lái)進(jìn)行排序。

4.2 使用場(chǎng)景及例子

4.2.1 排名
通過(guò)order by進(jìn)行排序得到排名。

SELECT
	id,
	name,
	score,
	NTILE(4) OVER(
	ORDER BY score DESC) AS ranks
FROM
	student_info

到此這篇關(guān)于sql中常見(jiàn)的四種排名函數(shù)的用法的文章就介紹到這了,更多相關(guān)sql 排名函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論

黄龙县| 曲水县| 沁水县| 湘阴县| 长沙县| 普兰店市| 龙南县| 泰顺县| 志丹县| 申扎县| 郑州市| 石首市| 甘南县| 龙井市| 扎赉特旗| 望都县| 台州市| 贡觉县| 龙井市| 竹山县| 拜城县| 丹棱县| 海安县| 遂平县| 武功县| 西吉县| 霞浦县| 永泰县| 岗巴县| 堆龙德庆县| 西峡县| 玉树县| 黎城县| 原阳县| 永登县| 华坪县| 乌拉特中旗| 叶城县| 耿马| 延长县| 开阳县|