Menu
CoddyTech

NTILE 函数

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 67 课,共 72 课。

NTILE(n) 会将行分成 n 个大小大致相等的部分,并为它们编号。它常用于提升性能,因为一次发送大量数据可能不是个好主意,所以这个函数可以让你每次发送较小的数据块。

例如:

idlevel
14
24
35
46
57
67
SELECT id, level, NTILE(3) OVER (ORDER BY level) as pieces
from table1

这将返回:

idlevelpieces
141
241
352
462
573
673

我们得到了 3 组:第 1 组是第 4 级,第 2 组是第 5 级和第 6 级,第 3 组是第 7 级。
当行数不能被 n 整除时,NTILE 会尽可能均匀地分配这些行,较大的组会排在前面。例如,如果有 9 行,并使用 NTILE(4),分配结果如下:

  • 组 1:3 行
  • 组 2:2 行
  • 组 3:2 行
  • 组 4:2 行

这样可以确保各组之间的行数最多相差 1 行,并且多出的行会优先分配给编号较小的组。

challenge icon

挑战

简单

可用的表和列:

  • creatures:creature_name,preference,has_legs(包含 'YES' 或 'NO')

在这个挑战中,有些生物想寻找另一半。我们需要帮它们找到合适的对象。

每种生物都有一个用数字表示的偏好值。如果两种生物的数字足够接近,它们可能很般配。

根据偏好值将生物分成 3 组,但只考虑有腿的生物(where has_legs = 'YES')。返回 creature_name、preference 和它们的 group_number(1、2 或 3)。按 preference 升序排列结果。

亲手试试

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: SQL 在线编辑器