全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
MaxCompute

分组取出每组数据的前N条

更新时间:2017-10-23 23:54:52

本文将为您介绍如何对数据进行分组,取出每组数据的前 N 条数据。

示例数据

目前的数据,如下表所示:

empno ename job sal
7369 SMITH CLERK 800.0
7876 SMITH CLERK 1100.0
7900 JAMES CLERK 950.0
7934 MILLER CLERK 1300.0
7499 ALLEN SALESMAN 1600.0
7654 MARTIN SALESMAN 1250.0
7844 TURNER SALESMAN 1500.0
7521 WARD SALESMAN 1250.0

实现方法

您可以通过以下两种方法实现:

  • 取出每条数据的行号,再用 where 语句进行过滤

    1. SELECT * FROM (
    2. SELECT empno
    3. , ename
    4. , sal
    5. , job
    6. , ROW_NUMBER() OVER (PARTITION BY job ORDER BY sal) AS rn
    7. FROM emp
    8. ) tmp
    9. WHERE rn < 10;
  • 使用 UDTF 实现 Split 函数。

    详情请参见 此文 中最后的示例。这个例子可以更迅速地判断当前的序号,如果是已经超过预定的条数(比如 10 条),便不做处理了,从而提高计算效率。

本文导读目录