哪些数据库供应商支持 Aggregate Rank() 函数?
Which database vendors support Aggregate Rank() function?
我看过一些数据库供应商,到目前为止,似乎只有 Oracle 在这两种情况下都支持 rank() 函数;分析和聚合。
这是他们文档的 link:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions123.htm
我看过 mySQL、Snowflake、e.t.c,但它们似乎都只支持分析 rank()。
有没有人在任何其他 RDBMS 的聚合上下文中使用排名,或者它通常是一种变通方法?
谢谢!
据我所知,目前(2018年4月)只有两个数据库将此功能实现为聚合:
Oracle --> 演示 --> 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
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 |
解析版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);
我看过一些数据库供应商,到目前为止,似乎只有 Oracle 在这两种情况下都支持 rank() 函数;分析和聚合。
这是他们文档的 link:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions123.htm
我看过 mySQL、Snowflake、e.t.c,但它们似乎都只支持分析 rank()。 有没有人在任何其他 RDBMS 的聚合上下文中使用排名,或者它通常是一种变通方法?
谢谢!
据我所知,目前(2018年4月)只有两个数据库将此功能实现为聚合:
Oracle --> 演示 --> 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
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 |
解析版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);