Skip to main content

用实例说明SQLite百分秩函数

PERCENT_RANK()函数简介

PERCENT_RANK()是一个窗口函数,使用以下公式计算给定行的百分比秩:

(r - 1) / (the number of rows in the window or partition - r)

其中r是当前行的秩。

函数的作用是:返回一个从0到1的值。任何集合中的第一行的百分比秩为0。

下面是PERCENT_RANK()函数的语法:

PERCENT_RANK()  
OVER (
[PARTITION BY partition_expression]
[ORDER BY order_list]
)

在这种语法中:

()

PERCENT_RANK()函数不带参数。但是,空括号是必需的。

分割

PARTITION BY子句将行划分为应用该函数的分区。partitionby子句是可选的。如果省略PARTITION BY子句,函数将把整个结果集视为单个分区。

订购人

ORDER BY子句指定函数应用到的每个分区中的行顺序。ORDER BY子句也是可选的。如果跳过它,函数将为所有行返回零。

SQLite PERCENT_RANK()函数示例

我们将使用示例数据库中的以下轨迹表进行演示。

在查询结果集示例上使用SQLite PERCENT_RANK()

下面的语句使用PERCENT_RANK()函数来查找唱片集id 1中每个曲目长度的百分比秩:

SELECT
Name,
Milliseconds,
PERCENT_RANK() OVER(
ORDER BY Milliseconds
) LengthPercentRank
FROM
tracks
WHERE
AlbumId = 1;

以下是输出:

SQLite PERCENT_RANK with ORDER BY clause

为了使输出更具可读性,可以使用printf()函数格式化百分比列组:

SELECT
Name,
Milliseconds,
printf('%.2f',PERCENT_RANK() OVER(
ORDER BY Milliseconds
)) LengthPercentRank
FROM
tracks
WHERE
AlbumId = 1;

结果如下:

SQLite PERCENT_RANK example

在分区示例上使用SQLite PERCENT_RANK()

下面的语句使用PERCENT_RANK()函数来计算每个专辑中曲目大小的百分比排名:

SELECT
AlbumId,
Name,
Bytes,
printf('%.2f',PERCENT_RANK() OVER(
PARTITION BY AlbumId
ORDER BY Bytes
)) SizePercentRank
FROM
tracks;

下图显示了输出:

SQLite PERCENT_RANK with PARTITION BY example

在本教程中,您已经学习了如何使用SQLite PERCENT_RANK()函数来计算有序结果集中某行的百分比秩。