欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1. ROW_NUMBER(排名場景推薦)

1.1 介紹

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

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

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

1.2 使用場景及例子

1.2.1 排名
通過order by進行排序得到排名。

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

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

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 分頁查詢
大可不必,不建議使用。

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

以下是RANK()的語法:

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

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

2.2 使用場景及例子

2.2.1 排名
通過order by進行排序得到排名。

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ū)表達式,ORDER BY子句按score列降序排序。

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

3. DENSE_RANK

3.1 介紹

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

3.2 使用場景及例子

3.2.1 排名
通過order by進行排序得到排名。

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ù)編號。常見的用途是將數(shù)據(jù)進行分組或劃分。
語法:

NTILE(n) OVER (ORDER BY expr)

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

4.2 使用場景及例子

4.2.1 排名
通過order by進行排序得到排名。

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

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

相關(guān)文章

最新評論