日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

MaxCompute支持使用QUALIFY語法根據您指定的過濾條件過濾窗(Window)函數的結果,QUALIFY語法過濾Window函數數據類似于HAVING語法處理經過聚合函數和GROUP BY后的數據。本文為您介紹QUALIFY語法和使用示例。

功能簡介

在一個查詢語句中QUALIFY語法的執行順序在WINDOW函數之后,用于對窗口函數處理后的數據進行篩選。通常,SELECT語句的子句按如下所示的順序執行:

  1. FROM

  2. WHERE

  3. GROUP BY

  4. HAVING

  5. WINDOW

  6. QUALIFY

  7. DISTINCT

  8. ORDER BY

  9. LIMIT

注意事項

  • QUALIFY語法需要查詢語句里面至少包含一個Window函數,在沒有Window函數的情況下使用QUALIFY語法會報錯:FAILED: ODPS-0130071:[3,1] Semantic analysis exception - use QUALIFY clause without window function。錯誤示例如下。

    SELECT * 
    FROM values (1, 2) t(a, b) 
    QUALIFY a > 1;
  • QUALIFY語法中允許用戶使用SELECT中列的別名作為過濾條件的一部分,示例如下。

    SELECT 
    sum(t.a) over (partition by t.b) as c1 
    FROM values (1, 2) t(a, b) 
    QUALIFY c1 > 1;

命令格式

QUALIFY <expression>

其中expression為過濾條件表達式。

使用示例

  • 通過使用QUALIFY語法可以將原有的語法簡化。

    • 改造前SQL命令及結果:

      SELECT col1, col2
      FROM
      (
      SELECT
      t.a as col1,
      sum(t.a) over (partition by t.b) as col2
      FROM values (1, 2),(2,3) t(a, b)
      )
      WHERE col2 > 1;
      
      --返回結果
      +------+------------+
      | col1 | col2       |
      +------+------------+
      | 2    | 2          |
      +------+------------+
    • 改寫后SQL命令及結果:

      SELECT 
      t.a as col1, 
      sum(t.a) over (partition by t.b) as col2 
      FROM values (1, 2),(2,3) t(a, b) 
      QUALIFY col2 > 1;
      
      --返回結果
      +------+------------+
      | col1 | col2       |
      +------+------------+
      | 2    | 2          |
      +------+------------+

      也可以不使用別名,直接對Window函數進行過濾,改寫如下。

      SELECT t.a as col1,
      sum(t.a) over (partition by t.b) as col2
      FROM values (1, 2),(2,3) t(a, b)
      QUALIFY sum(t.a) over (partition by t.b)  > 1;
      
      --返回結果
      +------+------------+
      | col1 | col2       |
      +------+------------+
      | 2    | 2          |
      +------+------------+
  • QUALIFY和WHERE、HAVING的使用方法相同,只是執行順序不同,所以QUALIFY語法允許您寫一些復雜的條件,示例如下。

    SELECT * 
    FROM values (1, 2),(2,3) t(a, b) 
    QUALIFY sum(t.a) over (partition by t.b)  IN (SELECT a FROM <table_name>);
  • QUALIFY執行于窗口函數生效后,如下較復雜的示例可以直觀感受QUALIFY語法的執行順序。

    SELECT a, b, max(c) 
    FROM values (1, 2, 3),(1, 2, 4),(1, 3, 5),(2, 3, 6),(2, 4, 7),(3, 4, 8) t(a, b, c) 
    WHERE a < 3 
    GROUP BY a, b 
    HAVING max(c) > 5 
    QUALIFY sum(b) over (partition by a) > 3;
    
    --返回結果
    +------+------+------+
    | a    | b    | _c2  |
    +------+------+------+
    | 2    | 3    | 6    |
    | 2    | 4    | 7    |
    +------+------+------+