NTILE 函数
本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 67 课,共 72 课。
NTILE(n) 会将行分成 n 个大小大致相等的部分,并为它们编号。它常用于提升性能,因为一次发送大量数据可能不是个好主意,所以这个函数可以让你每次发送较小的数据块。
例如:
| id | level |
| 1 | 4 |
| 2 | 4 |
| 3 | 5 |
| 4 | 6 |
| 5 | 7 |
| 6 | 7 |
SELECT id, level, NTILE(3) OVER (ORDER BY level) as pieces
from table1这将返回:
| id | level | pieces |
| 1 | 4 | 1 |
| 2 | 4 | 1 |
| 3 | 5 | 2 |
| 4 | 6 | 2 |
| 5 | 7 | 3 |
| 6 | 7 | 3 |
我们得到了 3 组:第 1 组是第 4 级,第 2 组是第 5 级和第 6 级,第 3 组是第 7 级。
当行数不能被 n 整除时,NTILE 会尽可能均匀地分配这些行,较大的组会排在前面。例如,如果有 9 行,并使用 NTILE(4),分配结果如下:
- 组 1:3 行
- 组 2:2 行
- 组 3:2 行
- 组 4:2 行
这样可以确保各组之间的行数最多相差 1 行,并且多出的行会优先分配给编号较小的组。
挑战
简单可用的表和列:
creatures:creature_name,preference,has_legs(包含 'YES' 或 'NO')
在这个挑战中,有些生物想寻找另一半。我们需要帮它们找到合适的对象。
每种生物都有一个用数字表示的偏好值。如果两种生物的数字足够接近,它们可能很般配。
根据偏好值将生物分成 3 组,但只考虑有腿的生物(where has_legs = 'YES')。返回 creature_name、preference 和它们的 group_number(1、2 或 3)。按 preference 升序排列结果。
亲手试试
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: SQL 在线编辑器