代码之家  ›  专栏  ›  技术社区  ›  Nero909

哪些数据库供应商支持Aggregate Rank()函数?

  •  1
  • Nero909  · 技术社区  · 7 年前

    我看过一些数据库供应商,到目前为止,似乎只有Oracle在这两种上下文中都支持rank()函数;分析(&A);总数的

    以下是他们的文档链接: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions123.htm

    我看过mySQL、Snowflake、e.t.c,但它们似乎都只支持分析等级()。 是否有人在聚合上下文中与任何其他RDBMS一起使用rank,或者它通常是一种变通方法?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   krokodilko    7 年前

    据我所知,目前(2018年4月),只有两个数据库作为聚合实现了此功能:

    神谕 --&燃气轮机;演示--> http://sqlfiddle.com/#!4/74fa70/2

    SELECT rank( 2 ) within group (order by x) as rank_x FROM qwe;
    
    SELECT rank( 2 ) within group (order by y) as rank_y FROM qwe;
    
    SELECT rank( 2, 7 ) within group (order by x,y)  as rank_x_y FROM qwe;
    
    | RANK_X |
    |--------|
    |      5 |
    
    | RANK_Y |
    |--------|
    |      2 |
    
    | RANK_X_Y |
    |----------|
    |        7 |
    

    PostgreSQL --&燃气轮机;演示--> http://sqlfiddle.com/#!17/74fa7/5

    从qwe中选择group(order by x)中的rank(2)作为rank\u x;
    
    从qwe中选择group(order by y)中的rank(2)作为rank\u y;
    
    从qwe中选择组内的秩(2,7)(按x,y排序)作为秩x\u y;
    
    |秩\u X|
    |--------|
    |5|
    
    |排名Y|
    |--------|
    |2|
    
    |排名\u X\u Y|
    |----------|
    |7|
    

    分析版本 rank() over ,除了Oracle和PostgreSQL之外,SQL Server、DB2、MySql(将在即将发布的版本中)中也已实现。


    这两个演示基于以下示例数据:

    CREATE TABLE qwe(
      x int, y int
     );
    
    insert into qwe values(1,1);
    insert into qwe values(1,2);
    insert into qwe values(1,3);
    insert into qwe values(1,4);
    insert into qwe values(2,5);
    insert into qwe values(2,6);
    insert into qwe values(3,7);