本文將為您介紹如何對數據進行分組,取出每組數據的前 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 語句進行過濾。
SELECT * FROM ( SELECT empno , ename , sal , job , ROW_NUMBER() OVER (PARTITION BY job ORDER BY sal) AS rn FROM emp ) tmp WHERE rn < 10;
- 使用 UDTF 實現 Split 函數。
詳情請參見 MaxCompute 學習計劃 中最后的示例。此例可以更迅速地判斷當前的序號,如果是已經超過預定的條數(例如10 條),便不再處理,從而提高計算效率。